188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
1

MicroPascal for PIC

03.11.2016, 11:30. Показов 713. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возникла непонятка с обработкой прерывания на MPascal и симуляции в Proteus 8.
К примеру допустим код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
program DEMO_CPU_1;
 
var
   Password: array [0..3] of word; {òóò ïðèäóìàíûé ïàðîëü}
   InCode: array [0..3] of word; {òóò ïðèíÿòûé ïàðîëü}
   key : byte; {íîìåð ïîçèöèè ââîäèìîãî ïàðîëÿ}
   i,r: byte;
   Error_input_Password: byte; {ôëàã =1 åñëè âõîäå ïðîâåðêè áûëî ðàçëè÷èå â ïàðîëè è ââåäåíîì ïàðîëå}
 
procedure ClearPassword;
begin
 for r := 0 to 3 do
  InCode[r] := 0;
end;
 
procedure key_test;
begin
 
 TRISA.3 := 0; //íà âûõîä
 PORTA.3 := 1; //âêëþ÷åí 1
end;
 
   
procedure interrupt;
begin   
 if PORTB.1 = 1 then
 begin
   key := key + 1;
 
 end;
 
 if key = 4 then
   key_test;
 
 
 
 
end;
 
begin
  key := 0;
  Error_input_Password :=0;
  {äëÿ íà÷àëà íàñòðîèì ïîðòû íà ïðèåì ñèãíàëà}
  TRISA.0 := 1; //íà âõîä
  PORTA.0 := 1; //âêëþ÷åí 1
  {íàñòðîåì äîïîëíèòåëüíûé}
  TRISA.3 := 0; //íà âûõîä
  PORTA.3 := 0; //íà âûõîä
  
  {èíèöèàëèçàöèÿ ïåðåìåííîé}
  InCode[0] := 0;
  InCode[1] := 0;
  InCode[2] := 0;
  InCode[3] := 0;
  
  {Çàïîëíÿåì ïàðîëü}
  Password[0] := 1;
  Password[1] := 1;
  Password[2] := 1;
  Password[3] := 1;    
  
  {ðàçðåøàåì îáðàáîòêó ïðåðûâàíèé}
  INTCON :=0;
  INTCON.RB7 := 1; {Ðàçðåøàåì íå ìàñêèðîâàíûå ïðåðûâàíèÿ}
  INTCON.RB4 := 1; {Ðàçðåøàåì ïðåðûâàíèÿ ïî âõîäó INT}
  
  OPTION_REG.6 := 0; {ïðåðûâàíèå ïî çàäíåìó ôðîíòó}
  
  while(true)do
  begin
  
 
 
  
  end;
end.
MicroPascal for PIC
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2016, 11:30
Ответы с готовыми решениями:

Лекарство для MicroPascal for AVR
Добрый день. Обращаюсь сюда, так как google мне не помог. Люди добрые, есть у кого нибудь таблетка...

MicroPascal Pro для PIC
MicroPascal Pro для PIC В общем что бы на АСМ не писать код, решил прибегнуть к микропаскалю. А...

Осваиваю PIC
Решил немного освоить пики. Думаю начать с ситемы команд и архитектуры. Может кто подскажет...

Изучение PIC
Здравствуйте! Вот решил изучать МК PIC. ЗДЕСЬ нашёл видеоуроки для меня более-менее доступные. В...

3
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,012
03.11.2016, 12:20 2
Pic 16f84 уйти в прерывание на micro pascal
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
04.11.2016, 07:31  [ТС] 3
Цитата Сообщение от pyzhman Посмотреть сообщение
Pic 16f84 уйти в прерывание на micro pascal
ну и чего вы указываете мне на мою же тему? Вы не поняли тут особеность - функция interrupt срабатывает когда на int подается сигнал! Но суть в том что если отследить код то key = key + 1 и тока потом проверяется условие. По практитке key повышается с каждым поданым сигналом на RB1 т.е. сначало 0, 1, 2 и т.д. суть подсчитать кол-во полученых импульсов. так вот когда на RB1 стоповый бит приходит то тогда считчик пишет в следующию чейку массива. (тут в коде не реализовано! это не важно)

Добавлено через 18 часов 25 минут
одним словом якобы переменная не повышается или проблема в протеусе
0
6767 / 2737 / 384
Регистрация: 17.02.2013
Сообщений: 4,045
10.11.2016, 20:08 4
Цитата Сообщение от n971030 Посмотреть сообщение
По практитке key повышается с каждым поданым сигналом
Цитата Сообщение от n971030 Посмотреть сообщение
одним словом якобы переменная не повышается
Какая переменная ? key ? Так выше Вы написали, что она повышается.

Можно изьясняться так чтобы можно было понять в чем Ваша проблема ?

И потом, разве в обработчике прерывания INTCON.INTF не надо чистить ?

Добавлено через 32 минуты
-----------------------------------------------------------------------------------------------------------

А ну все ясно ! И как-раз по осциллограмме.

Вы INTCON.INTF в обработчике не чистите, а значит после первого-же падающего фронта на ноге RB0/INT начнется буря прерываний. После каждой команды главного цикла будет прерывание. А значит как только линия RB1 подымется в единицу key начнет с визгом инкрементироваться. Мгновенно станет и 4 и 104 и 204 и от этого линия RA3 вскинется синхронно с вскидыванием сигнала на линии RB1 и наплевать, что линия RB0/INT в этот момент стабильно торчит в нуле. И все это есть на осциллограмме.
0
10.11.2016, 20:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2016, 20:08
Помогаю со студенческими работами здесь

Вольтметр на PIC
Вольтметр на PIC16F677 нужна помощь в разработке проекта. Технические характеристики: -Индикация...

ЗУ и БП с индикацией на PIC
Всем привет. Прошу помощи, хочу сделать "нормальную" зарядку для АКБ + еще БП от 0-12 вольт....

Assembler pic
Помогите пожалуйста с программой на пик симуляторе. Почему не выводятся числа на 7 сегментный...

PIC Uart
Начинаю знакомство с PIC микроконтроллерами. Решил написать программу для работы с UART. Запускаю...

flash в pic
Акакже записывать, подскажите нубу ссылочку

Assembler PIC
Вопрос довольно простой, где здесь можно создавать темы по программированию PIC микроконтроллеров?...

PIC 16F84A
Добрый день, помогите обьясните а то чижу уже 2 недели и не могу разобраться как на контролере...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru