Chương trình chính

Một phần của tài liệu Mạch điều khiển đóng ngắt điện sử dụng vi điều khiển (Trang 55)

Chức năng phối hợp hoạt động giữa các cgương trình con, kiểm tra trạng thái của toàn bộ hệ thống để thực hiện điều khiển toàn bộ chức năng của hệ thống. Chương trình chính sẽ theo dõi tín hiệu từ các chương trình con trả về và từ đó đưa ra các quyết định điều khiển tương ứng.

5.9. Sơ đồ thuật toán

B¾T §ÇU

KHëi t¹o time 1 push R0 Push A T¨ng byte counter button menu enable menu byte counter = 20h plag menu = 1 byte counter = 00H POP A POP R0 KÕT THóC F F F T T T

Thuật toán hiển thị:

B¾T §ÇU

push R0 Push A

T¨ng INDEX CURRENT LED

INDEX CURRENT LED = 04H

INDEX CURRENT LED = 00H

INDEX CURRENT LED = INDEX FLICKER LED NORMAL LED (); FLICKER LED (); POP A POP R0 KÕT THóC T T F

Thuật toán đếm thời gian:

B¾T §ÇU

KHëI T¹O TIME 0 push R0 Push A T¡NG R7 R7 = 14H R7 = 00H T¡NG §¥N VÞ GI¢Y §¥N VÞ GI¢Y = 10 T §¥N VÞ GI¢Y = 0 T¡NG CHôC GI¢Y CHôC GI¢Y = 6 T CHôC GI¢Y = 0 T¡NG §¥N VÞ PHóT T §¥N VÞ PHóT = 10 T F F F F

§¥N VÞ PHóT = 0 T¡NG CHôC PHóT CHôC PHóT = 6 CHôC PHóT = 0 T¡NG §¥N VÞ GIê §¥N VÞ GIê = 4 T §¥N VÞ GIê = 10 §¥N VÞ GIê = 0 T¡NG CHôC GIê T KÕT THóC CHôC GIê = 2 T T T F F F F §¥N VÞ GIê = 0 CHôC GIê = 0 POP A POP R0

Chương trình chính:

B¾T §ÇU

KHëi t¹o BIÕN, Cê KHëI T¹O Bé §ÞNH THêI KHæI §éNG DS 1307

GäI HµM §äC THêI GIAN Tõ 1307

KIÓM TRA Cê §ÌN

KIÓM TRA Cê MENU

T

kIÓM TRA Cê EXIT

WRITE DS 1307 KIÓM TRA BËT HOÆC T¾T §ÌN T T F F F INPUT DATA

Ta có chương trình như sau:

; ***** DINH NGHIA CAC THANH GHI CHUC NANG DAC BIET ***** TCON EQU 88h T2CON EQU c8h PCON EQU 87h TMOD EQU 89h TL0 EQU 8Ah TL1 EQU 8Bh TH0 EQU 8Ch TH1 EQU 8Dh RCAP2L EQU CAh RCAP2H EQU CBh TL2 EQU CCh TH2 EQU CDh SP EQU 81h IE EQU A8h IP EQU B8h P0 EQU 80h P1 EQU 90h P2 EQU A0h P3 EQU B0h ACC EQU E0h B EQU F0h

; ***** DINH NGHIA CAC CHAN CHUC NANG DIEU KHIEN ROLE ***** DK_RL EQU P1

DK_RL0 BIT DK_RL.0 ; =0 -> Bat Role, DK_RL1 BIT DK_RL.1 ; =1 -> Bat Role DK_RL2 BIT DK_RL.2 ; =1 -> Bat Role DK_RL3 BIT DK_RL.3 ; =0 -> Bat Role DK_RL4 BIT DK_RL.4 DK_RL5 BIT DK_RL.5 DK_RL6 BIT DK_RL.6 DK_RL7 BIT DK_RL.7 EN_RL_07 BIT P3.2 EN_RL_8F BIT P3.3

; ***** DINH NGHIA CAC CHAN CHUC NANG DIEU KHIEN INTERFACE 24C VA DS1307 *****

SCL_DS BIT P3.6 ; Dieu khien doc ghi Data SDA_DS BIT P3.7 ; Dieu khien xung Clock SCL_24C BIT P3.4 ; Dieu khien xung Clock SDA_24C BIT P3.5 ; Dieu khien doc ghi Data

; ***** DINH NGHIA CAC CHAN CHUC NANG DIEU KHIEN HIEN THI LED *****

GIAI_MA EQU P0 DK_HIENTHI EQU P2

; ***** DINH NGHIA CAC CHAN CHUC NANG PHIM ***** BUTTON_MENU BIT P2.3

BUTTON_EXIT BIT P2.2 BUTTON_INC BIT P2.1 BUTTON_DEC BIT P2.0 ;

; ****** DINH NGHIA CAC HANG VA BIT SU DUNG CHO GIAO TIEP I2C ******

DeviceW_DS EQU 11010000B ; Device ADDRESS 1101 000 + 0 TO WRITE

DeviceR_DS EQU 11010001B ; Device ADDRESS 1101 000 + 1 TO READ

STATUS_FLAG EQU 2DH

ALARM_FLAG BIT STATUS_FLAG.0

I2C_FLAGS EQU 2EH ; Byte nho 2FH duoc dung lam co nho. Moi bit duoc nho voi muc dich khac nhau

; Dat ten Bit danh dau trang thai

LAST_READ_DS BIT I2C_Flags.0 ; Danh dau trang thai byte cuoi cung duoc doc trong mot chu ky doc

ACK_DS BIT I2C_Flags.1 ; Danh dau trang thai tao bit ACK sau moi lan trao doi Byte

BUS_FAULT_DS BIT I2C_Flags.2 ; Danh dau trang thai Bus loi BUS_BUSY_DS BIT I2C_Flags.3 ; Danh dau trang thai Bus busy LAST_READ_24C BIT I2C_Flags.4 ; Danh dau trang thai byte cuoi cung duoc doc trong mot chu ky doc

ACK_24C BIT I2C_Flags.5 ; Danh dau trang thai tao bit ACK sau moi lan trao doi Byte

BUS_FAULT_24C BIT I2C_Flags.6 ; Danh dau trang thai Bus loi BUS_BUSY_24C BIT I2C_Flags.7 ; Danh dau trang thai Bus busy BIT_ACC7 BIT E7h

; ****** DINH NGHIA CAC BIEN VA BIT SU DUNG CHO CHUC NANG NHAN PHIM ******

BUTTON_FLAG EQU 2Fh

ENABLE_BUTTON_MENU BIT BUTTON_FLAG.0 ; BIT chi thi cho phep "nhan" phim MENU : =1 cho phep ; =0 khong cho phep

ENABLE_BUTTON_EXIT BIT BUTTON_FLAG.1 ; BIT chi thi cho phep "nhan" phim EXIT : =1 cho phep ; =0 khong cho phep

ENABLE_BUTTON_INC BIT BUTTON_FLAG.2 ; BIT chi thi cho phep "nhan" phim INC : =1 cho phep ; =0 khong cho phep

ENABLE_BUTTON_DEC BIT BUTTON_FLAG.3 ; BIT chi thi cho phep "nhan" phim DEC : =1 cho phep ; =0 khong cho phep

FLAG_BUTTON_MENU BIT BUTTON_FLAG.4 ; Co bao phim MENU da an hay ko? : =1 da an ; =0 chua duoc an

FLAG_BUTTON_EXIT BIT BUTTON_FLAG.5 ; Co bao phim EXIT da an hay ko? : =1 da an ; =0 chua duoc an

FLAG_BUTTON_INC BIT BUTTON_FLAG.6 ; Co bao phim INC da an hay ko? : =1 da an ; =0 chua duoc an

FLAG_BUTTON_DEC BIT BUTTON_FLAG.7 ; Co bao phim DEC da an hay ko? : =1 da an ; =0 chua duoc an

BYTE_COUNTER EQU 50h ; Byte dem so lan ngat nhan phim ; dung chung cho tat ca cac phim

; =#20h = 32lan -> Chap nhan phim duoc an, va Reset Byte ve Zero

COUNTER_BIT_DS EQU 57h ; Byte dung de dem tao cac vong lap doc ghi cac bit

COUNTER_BYTE_DS EQU 58h ; Byte dung de dem tao cac vong lap doc ghi cac byte

COUNTER_BIT_24C EQU 59h ; Byte dung de dem tao cac vong lap doc ghi cac bit

COUNTER_BYTE_24C EQU 5Ah ; Byte dung de dem tao cac vong lap doc ghi cac byte

BYTE_INDEX_RW_ROM EQU 5BH ; Byte con tro chi vi tri can doc ghi du lieu len Rom

BYTE_INDEX_RW_RAM EQU 5CH ; Byte con tro chi vi tri vung dem du lieu trao doi voi Rom tren Ram

BYTE_SUM_BYTE_RW EQU 5DH ; Tong so byte trao doi trong moi lan

; ****** DINH NGHIA CAC BIEN CHI THI CHO HIEN THI ******

INDEX_CURRENT_LED EQU 5Fh ; Chi vi tri LED hien thoi duoc hien thi trong 1 chu ky quet

; Gia tri tu 0->E tuong ung LED 1-15; tu LED chuc gio den LED thu ngay

INDEX_FLICKER_LED EQU 60h ; Chi vi tri LED nhay hien thoi trong thao tac nhap du lieu

; Gia tri tu 0->E tuong ung LED 1-15; tu LED chuc gio den LED thu ngay

; ****** DINH NGHIA VUNG NHO DEM CHO HIEN THI ****** BYTE_BUFFER_1 EQU 61h

BYTE_BUFFER_2 EQU 62h BYTE_BUFFER_3 EQU 63h BYTE_BUFFER_4 EQU 64h BYTE_BUFFER_5 EQU 65h

BYTE_BUFFER_6 EQU 66h BYTE_BUFFER_7 EQU 67h BYTE_BUFFER_8 EQU 68h BYTE_BUFFER_9 EQU 69h BYTE_BUFFER_A EQU 6Ah BYTE_BUFFER_B EQU 6Bh BYTE_BUFFER_C EQU 6Ch BYTE_BUFFER_D EQU 6Dh BYTE_BUFFER_E EQU 6Eh BYTE_BUFFER_F EQU 6Fh

; ****** DINH NGHIA VUNG NHO THOI GIAN THUC ***** BYTE_CHUC_GIO EQU 70h BYTE_DONVI_GIO EQU 71h BYTE_CHUC_PHUT EQU 72h BYTE_DONVI_PHUT EQU 73h BYTE_CHUC_GIAY EQU 74h BYTE_DONVI_GIAY EQU 75h BYTE_CHUC_NGAY EQU 76h BYTE_DONVI_NGAY EQU 77h BYTE_CHUC_THANG EQU 78h BYTE_DONVI_THANG EQU 79h BYTE_NGHIN_NAM EQU 7Ah BYTE_TRAM_NAM EQU 7Bh BYTE_CHUC_NAM EQU 7Ch BYTE_DONVI_NAM EQU 7Dh BYTE_THU_NGAY EQU 7Eh INDEX_RAM_DISPLAY EQU 7Fh

; --*---*---MAIN---*---*

ORG 0000H ; dia chi nap rom bat dau cua chuong trinh LJMP BEGIN

ORG 000BH ; dia chi nap rom bat dau cua chuong trinh con dem thoi gian

LJMP COUNTER_TIME

ORG 001BH ; dia chi nap rom bat dau cua chuong trinh con phim bam LJMP GET_KEY

ORG 002BH ; dia chi nap rom bat dau cua chuong trinh con hien thi LJMP DISPLAY

ORG 0030H ; dia chi nap rom bat dau cua chuong trinh chinh BEGIN:

;****** KHOI TAO CAC BIEN GIA TRI VA PORT IN/OUT ****** MOV P0,#00h MOV P1,#00000000B MOV P2,#FFh MOV P3,#FFh CLR ENABLE_BUTTON_MENU CLR ENABLE_BUTTON_EXIT CLR ENABLE_BUTTON_INC CLR ENABLE_BUTTON_DEC CLR FLAG_BUTTON_MENU CLR FLAG_BUTTON_EXIT CLR FLAG_BUTTON_INC CLR FLAG_BUTTON_DEC CLR ALARM_FLAG MOV byte_chuc_gio, #02H MOV byte_donvi_gio, #03H MOV byte_chuc_phut, #05H MOV byte_donvi_phut, #09H MOV byte_chuc_giay, #04H MOV byte_donvi_giay, #05H MOV byte_chuc_ngay, #03H MOV byte_donvi_ngay, #00H MOV byte_chuc_thang, #01H MOV byte_donvi_thang,#01H MOV byte_nghin_nam, #02H MOV byte_tram_nam, #00H MOV byte_chuc_nam, #00H MOV byte_donvi_nam, #07H MOV byte_thu_ngay, #06H

MOV INDEX_CURRENT_LED,#01h ; Thanh ghi chi vi tri den duoc hien thi tai mot thoi diem

MOV INDEX_FLICKER_LED,#FFh

MOV INDEX_RAM_DISPLAY,#BYTE_CHUC_GIO ; Thanh ghi chi vi tri den duoc hien thi tai mot thoi diem

;****** DAT CAU HINH CAC BO DINH THOI ******

MOV TMOD,#00010001b ; Che do dinh thoi 16bit - bo dinh thoi 0 va 1 MOV TH0,#3Ch ; Dat -50000 bo dinh thoi 0

MOV TL0,#AEh ; nhu tren

MOV TH1,#F8h ; Dat -20000 bo dinh thoi 1 MOV TL1,#2Fh ; nhu tren

MOV RCAP2H,#FCh ; Dat -1000 bo dinh thoi 2 cho hien thi MOV RCAP2L,#14h ; nhu tren

MOV T2CON,#00000100b ; che do dinh thoi SETB TCON.4 ; Cho phep bo dinh thoi 0 SETB TCON.6 ; Cho phep bo dinh thoi 1

MOV IE,#AAh ; Cho phep ngat - bo dinh thoi 0 va 1

MOV IP,#02h ; Dat muc uu tien nhat cho ngat dem thoi gian - cua bo dinh toi 0

; ******* PHAI CHU Y KHOI DONG DS1307 NEU THAY CON MOI VAO ******* LCALL OSC_CONTROL_DS LCALL READ_TIME_DS SETB ENABLE_BUTTON_MENU SETB ENABLE_BUTTON_EXIT CLR ENABLE_BUTTON_INC CLR ENABLE_BUTTON_DEC MAIN_LOOP: JNB ALARM_FLAG,NOT_ALARM LCALL CHECK_ALARM CLR ALARM_FLAG NOT_ALARM: JBC FLAG_BUTTON_MENU,INPUT_REAL_TIME SJMP MAIN_LOOP INPUT_REAL_TIME: SETB ENABLE_BUTTON_MENU SETB ENABLE_BUTTON_EXIT SETB ENABLE_BUTTON_INC SETB ENABLE_BUTTON_DEC

; ****** Chuyen du lieu tu vung thoi gian thuc sang vung chinh thoi gian ******

MOV BYTE_BUFFER_1, BYTE_CHUC_GIO ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_2, BYTE_DONVI_GIO ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_3, BYTE_CHUC_PHUT ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_4, BYTE_DONVI_PHUT ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_5, BYTE_CHUC_GIAY ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_6, BYTE_DONVI_GIAY ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_7, BYTE_CHUC_NGAY ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_8, BYTE_DONVI_NGAY ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_9, BYTE_CHUC_THANG ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_A, BYTE_DONVI_THANG ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_B, BYTE_NGHIN_NAM ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_C, BYTE_TRAM_NAM ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_D, BYTE_CHUC_NAM ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_E, BYTE_DONVI_NAM ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_F, BYTE_THU_NGAY ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV INDEX_RAM_DISPLAY,#BYTE_BUFFER_1 MOV INDEX_FLICKER_LED,#00h

LCALL INPUT_DATA

CLR ENABLE_BUTTON_INC CLR ENABLE_BUTTON_DEC

; ****** Chuyen du lieu tu vung thoi gian thuc sang vung chinh thoi gian ******

MOV BYTE_CHUC_GIO, BYTE_BUFFER_1 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_DONVI_GIO, BYTE_BUFFER_2 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_CHUC_PHUT, BYTE_BUFFER_3 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_DONVI_PHUT, BYTE_BUFFER_4 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_CHUC_GIAY, BYTE_BUFFER_5 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_DONVI_GIAY, BYTE_BUFFER_6 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_CHUC_NGAY, BYTE_BUFFER_7 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_DONVI_NGAY, BYTE_BUFFER_8 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_CHUC_THANG, BYTE_BUFFER_9 ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_DONVI_THANG,BYTE_BUFFER_A ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_NGHIN_NAM, BYTE_BUFFER_B ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_TRAM_NAM, BYTE_BUFFER_C ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_CHUC_NAM, BYTE_BUFFER_D ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_DONVI_NAM, BYTE_BUFFER_E ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_THU_NGAY, BYTE_BUFFER_F ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV INDEX_RAM_DISPLAY,#BYTE_CHUC_GIO ; Tra lai con tro hien thi chi vao vung thoi gian thuc

LCALL WRITE_TIME_DS ; GHI LAI THOI GIAN DA CHINH VAO DS1307

LJMP MAIN_LOOP

RESET_BUFFER:

MOV BYTE_BUFFER_1, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_2, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_3, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_4, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_5, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_6, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_7, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_8, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_9, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_A, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_B, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_C, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_D, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_E, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

MOV BYTE_BUFFER_F, #00h ; Nhap bang du lieu da nhap sang vung thoi gian thuc

RET

;************************************************ ; Chuong trinh con nhap day 7 so

; Dau vao la Byte chi vi tri vung nho can nhap

;************************************************ INPUT_DATA: LOOP_INPUT_DATA: JBC FLAG_BUTTON_MENU, SUB_BUTTON_MENU JBC FLAG_BUTTON_EXIT, SUB_BUTTON_EXIT JBC FLAG_BUTTON_INC, SUB_BUTTON_INC JBC FLAG_BUTTON_DEC, SUB_BUTTON_DEC SJMP LOOP_INPUT_DATA SUB_BUTTON_MENU:

MOV R0,#INDEX_FLICKER_LED ; Thanh ghi chi so den nhay INC @R0 ; Tang chi so den nhay -> Nhay sang den tiep theo CJNE @R0,#04h,LOOP_INPUT_DATA

MOV @R0,#00h

LJMP LOOP_INPUT_DATA SUB_BUTTON_INC:

MOV A,#BYTE_BUFFER_1 ; Chuyen con tro vung nhap du lieu vao thanh ghi A

ADD A,INDEX_FLICKER_LED ; Cong con tro vung nhap su lieu voi chi so den nhay -> tro den byte nho dang can nhap du lieu

MOV R0,A ; Chuyen con tro vao R0

INC @R0 ; Tang du lieu tren byte nhap du lieu

CJNE @R0,#0Ah,LOOP_INPUT_DATA ; Kiem tra vuot qua 9 -> 0 MOV @R0,#00h ; Xoa du lieu byte ve 0 khi tang qua 9 LJMP LOOP_INPUT_DATA

SUB_BUTTON_DEC:

MOV A,#BYTE_BUFFER_1 ; Chuyen con tro vung nhap du lieu vao thanh ghi A

ADD A,INDEX_FLICKER_LED ; Cong con tro vung nhap su lieu voi chi so den nhay -> tro den byte nho dang can nhap du lieu

MOV R0,A ; Chuyen con tro vao R0

CJNE @R0,#00H,YES_DEC ; Kiem tra vuot qua 9 -> 0

SJMP NO_DEC YES_DEC: DEC @R0 NO_DEC: LJMP LOOP_INPUT_DATA SUB_BUTTON_EXIT: MOV INDEX_FLICKER_LED,#FFh RET

;****** VONG LAP CHO DOI LIEN TUC ******

HERE: LJMP HERE

;******* Chuong trinh nhan phim ****** GET_KEY: MOV TH1,#F8h ; Khoi tao lai thanh ghi dinh thoi 1 MOV TL1,#2Fh ; Khoi tao lai thanh ghi dinh thoi 1 PUSH 00h ; Cat gia tri trong thanh ghi R0 MOV 00h,A PUSH 00h ; Cat gia tri trong thanh ghi A MOV R0,#BYTE_COUNTER INC @R0 JNB BUTTON_MENU,SUB_MENU ; bit = 0 ( phim lua chon duoc an, nhay den "lua chon") JNB BUTTON_EXIT,SUB_EXIT ; bit = 0 ( phim chinh tang duoc an, nhay den "chinh tang") JNB BUTTON_INC,SUB_INC ; bit = 0 ( phim chinh tang duoc an, nhay den "chinh tang") JNB BUTTON_DEC,SUB_DEC ; bit = 0 ( phim chinh tang duoc an, nhay den "chinh tang") MOV @R0,#00h ; Xoa BYTE_COUNTER khi ko co phim duoc an

LJMP END_GET_KEY ; Khong co phim nao duoc an -> ket thuc get_key

SUB_MENU:

JNB ENABLE_BUTTON_MENU,END_GET_KEY ; Kiem tra co cho phep nhan phim MENU hay ko; ENABLE_BUTTON_MENU

CJNE @R0,#20h,END_GET_KEY ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ( Muc dich chong nhieu xung)

SETB FLAG_BUTTON_MENU ; Bat co bao co phim MENU vua duoc an

LJMP END_GET_KEY SUB_EXIT:

JNB ENABLE_BUTTON_EXIT,END_GET_KEY ; Kiem tra co cho phep nhan phim EXIT hay ko; ENABLE_BUTTON_EXIT

CJNE @R0,#20h,END_GET_KEY ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ( Muc dich chong nhieu xung)

SETB FLAG_BUTTON_EXIT ; Bat co bao co phim EXIT vua duoc an

LJMP END_GET_KEY SUB_INC:

JNB ENABLE_BUTTON_INC,END_GET_KEY ; Kiem tra co cho phep nhan phim EXIT hay ko; ENABLE_BUTTON_INC

CJNE @R0,#10h,END_GET_KEY ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ( Muc dich chong nhieu xung)

SETB FLAG_BUTTON_INC ; Bat co bao co phim INC vua duoc an

LJMP END_GET_KEY SUB_DEC:

JNB ENABLE_BUTTON_DEC,END_GET_KEY ; Kiem tra co cho phep nhan phim EXIT hay ko; ENABLE_BUTTON_DEC

CJNE @R0,#10h,END_GET_KEY ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ( Muc dich chong nhieu xung)

SETB FLAG_BUTTON_DEC ; Bat co bao co phim DEC vua duoc an

LJMP END_GET_KEY END_GET_KEY:

POP 00h ; Lay lai cac gia tri truoc do cua R0

Một phần của tài liệu Mạch điều khiển đóng ngắt điện sử dụng vi điều khiển (Trang 55)