Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; .
- dseg at 30h
- symb1: ds 1 ;
- symb2: ds 1
- symb3: ds 1
- symb4: ds 1
- symb5: ds 1
- symb6: ds 1
- symb7: ds 1
- org 40h
- stack: ds 20 ; резервируем под стек 20 байт
- poz EQU R5 ; номер активного знакоместа
- cycpoz EQU R1 ;
- RG2 EQU 0A000h ; внешние порты светодиодного индикатора
- RG3 EQU 0B000h ;
- cseg
- jmp start
- org 000Bh ;
- jmp TIMER_0_ISR ;
- org 30h ;
- num_mass: db 00111111b,00000110b,01011011b,01001111b,01100110b,01101101b,01111101b,00000111b,01111111b,01101111b,01000000b
- ;"0"=3Fh ;"1"=06h ;"2"=5Bh ;"3"=4Fh ;"4"= 66h ;"5"=6Dh ;"6"=7Dh ;"7"= 07h ;"8"= 7Fh ;"9"=6Fh ;"-"=40h
- ; массив кодов чисел от "0" до "9" + тире ("-")
- org 3Bh ;
- poz_mass: db 10111111b,11011111b,11101111b,11110111b,11111011b,11111101b
- ; BFh ; DFh ; EFh ; F7h ; FBh
- ; массив кодов знакомест
- org 50h
- start: ;
- mov symb1,#0 ;
- mov symb2,#0
- mov symb3,#2
- mov symb4,#0
- mov symb5,#0
- mov symb6,#0
- mov scon, #01000000b ; serial port control
- ; Включить асинхронный режим работы последовательного порта
- ; Обнулить флаг приемника RI
- mov IE,#10000010b ; interrupt enable control разрешаем прерывания(EA=1),
- ; а именно - прерывания по переполнению таймера 0 и 1
- mov TMOD,#00100001b ; Timer/counter mode control установка режима 1 для таймеров 0 и 1
- mov TH0,#high(65536-6000) ; timer0 high byte Переполнение- каждые 6000мкс
- mov TL0,#low(65536-6000) ; timer0 low byte
- mov TH1,#256-3 ; timer1 high byte 256 - (f/12)/(32*V)
- mov TL1,#256-3 ; timer1 low byte
- setb TR0 ; запуск таймера 0
- setb TR1 ; запуск таймера 1
- setb REN ; Бит разрешения приема. Устанавливается/сбрасывается программно для разрешения/запрета приема последовательных данных
- start_receive: ;
- mov cycpoz,#30h ;
- receive: ;
- JNB RI,receive ; RI Флаг прерывания приемника. Устанавливается аппаратно при приеме байта. Сбрасывается программно после обслуживания прерывания
- ; Подождать окончания приема байта по последовательному порту ( пока 0 принимаем => JNB )
- mov a,SBUF ; и скопировать его в аккумулятор
- clr RI ;
- mov @cycpoz,a ;
- inc cycpoz ;
- cjne cycpoz,#36h,receive ;
- jmp zeend ;
- TIMER_0_ISR : ;
- mov TH0,#high(65536-1000) ;
- mov TL0,#low(65536-1000) ;
- POZ_i:
- mov A,#3Bh ; в Асс - базовый адресс таблицы кодов знакомест
- mov DPH,#0 ;
- mov DPL,poz ; в DPTR - номер знакоместа,которое будем делать активным
- movc A,@A+DPTR ; в Асс-код знакоместа код знакоместа
- mov DPTR,#RG2
- movx @DPTR,A ; вывод в RG2
- mov A,#30h ; в Асс - адрес переменной min_hi в памяти данных
- add A,poz ; выводимая цифра зависит от текущей позиции
- ; (0 - min_hi,1 - min_lo,...,4 - sec_lo)
- mov R0,A ;
- mov DPH,#0 ;
- mov DPL,@R0 ;
- mov A,#30h ; в Асс - базовый адресс таблицы кодов цифр
- movc A,@A+DPTR ;
- mov DPTR,#RG3
- movx @DPTR,A ; вывод в RG3
- inc poz ; переходим к следующему знакоместу
- cjne poz,#6,END_ISR0
- mov poz,#0
- END_ISR0:
- reti
- zeend:
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement