; MINI-TERMINAL SA LCD MODULOM I TASTATUROM 40 tastera ; MIKROKONTROLER serije 80C32 ; by: Goran Stankovic dipl.ing.el. 26.02.2000. ; www.qsl.net/yt2fsg goranstank@email.com ;-------- DEFINICIJA PROMENJIVIH ZA LCD MODUL -------------------- LCD_CNT EQU 30h ; Counter LCD_ADDR DS 1 ; Privremeni registar za adresu LCD_DATA DS 1 ; Privremeni registar za podatke LCD_CNT_CHR DS 1 ; Projac karaktera BROJAC1 DS 1 SEC DS 1 MIN DS 1 SAT DS 1 MEM_0 DS 1 MEM_1 DS 1 MEM_2 DS 1 MEM_3 DS 1 KEY_CNT DS 1 ; Brojac redova KEY_ADR DS 1 ; Adresa redova KEY_COD DS 1 K_SHIFT DS 1 K_CODE DS 1 KS0 DS 1 KS1 DS 1 KS2 DS 1 KS3 DS 1 OP_1 DS 1 OP_0 DS 1 M_DPL DS 1 M_DPH DS 1 MEM DS 1 MEM_IN DS 1 POS DS 1 ;Pozicija karaktera u Edit Bufferu POS_IN DS 1 ;Pozicija karaktera u Input Bufferu BR_LINE_OUT DS 1 ;Pozicija linije u OUT MEM BR_LINE_IN DS 1 ;Pozicija linije u IN MEM LCD_W_ADDR EQU 8000h ; Adresa RAM-a LCD_W_DATA EQU 8001h ; Adresa RAM-a LCD_R_ADDR EQU 8002h ; Adresa RAM-a LCD_R_DATA EQU 8003h ; Adresa RAM-a MAX_LEN EQU 80 ; Max broj karaktera u liniji MAX_LINE EQU 126 ; Max broj linija u memoriji po 128 CHR OUT_BUFFER EQU 0000h ; Pocetak Edit Buffera IN_BUFFER EQU 0080h ; Pocekak Buffera za prijem preko RS OUT_MEM EQU 0100h ; Pocetak Memorije za kucani tekst IN_MEM EQU 4100h ; Pocetak Memorije za prijem preko RS ;-------- DEFINICIJA REGISTARA ----------------------- PCON EQU 087h FLAGS2 EQU 2Eh EDIT EQU 76h ;BIT FLAGS2.6 P_TASTER EQU 77h ;BIT FLAGS2.7 FLAGS1 EQU 2Fh SHIFT_L EQU 78h ;BIT FLAGS1.0 SHIFT_D EQU 79h ;BIT FLAGS1.1 C_LOCK EQU 7Ah ;BIT FLAGS1.2 INSERT EQU 7Bh ;BIT FLAGS1.3 LEVO EQU 7Ch ;BIT FLAGS1.4 DESNO EQU 7Dh ;BIT FLAGS1.5 GORE EQU 7Eh ;BIT FLAGS1.6 DOLE EQU 7Fh ;BIT FLAGS1.7 ;---------------------------------------------------------------- ORG 0 LJMP Pocetak1 ;---------------------------------------------------------------- ORG 000Bh ; Interapt od TF0 PUSH PSW PUSH ACC JMP Interapt_TF0 ;---------------------------------------------------------------- ORG 0030h ; Interapt od TF0 Interapt_TF0: MOV PSW,#00001000B ; Selekt Bank 1 MOV TL0,#0 ; Za Q 11.0592 MHz MOV TH0,#184 ; Poziva interapt svake 20ms ; Odnosno 50 ciklusa u 1 sec INC BROJAC1 MOV A,BROJAC1 ADD A,#236 ;? > 20 JNC Skok2 MOV BROJAC1,#0 ; CALL Meri_Vreme Skok2: CALL Tastatura ; CALL P_reg JNB P_TASTER,Skok3 CALL P_Buffer Skok3: POP ACC POP PSW RETI ;---------------------------------------------------------------- P_Buffer: MOV LCD_DATA,#00001100B ; Display on, cursor off CALL SendCmd MOV R0,#0 MOV R1,#16 MOV A,#224 ;Duzina LCD je 32 chr ADD A,POS JNC Pozicija_32 MOV A,POS CLR C SUBB A,#31 MOV R0,A MOV A,POS CLR C SUBB A,#15 MOV R1,A Pozicija_32: CLR P_TASTER ;Print 1. red na LCD MOV LCD_DATA,#10000000B CALL SendCmd MOV R2,#16 Loop_Red1: MOV P2,#0 MOVX A,@R0 MOV LCD_DATA,A CALL SendChar INC R0 DJNZ R2,Loop_Red1 ;Print 2. red na LCD MOV LCD_DATA,#11000000B CALL SendCmd MOV R2,#16 Loop_Red2: MOV P2,#0 MOVX A,@R1 MOV LCD_DATA,A CALL SendChar INC R1 DJNZ R2,Loop_Red2 ;Prikazivanje kursora MOV A,#224 ;Dali je 1. red na LCD ADD A,POS JC Pozicija_Kusora_1 MOV A,#240 ;Dali je 2. red na LCD ADD A,POS JC Pozicija_Kusora_2 MOV LCD_DATA,#00001111B ; Display on, cursor on CALL SendCmd MOV A,#10000000B ; Adresa cursora ADD A,POS MOV LCD_DATA,A CALL SendCmd RET Pozicija_Kusora_1: MOV LCD_DATA,#00001111B ; Display on, cursor on CALL SendCmd MOV LCD_DATA,#11001111B ; Adresa cursora CALL SendCmd RET Pozicija_Kusora_2: MOV LCD_DATA,#00001111B ; Display on, cursor on CALL SendCmd MOV A,POS CLR C SUBB A,#16 ADD A,#11000000B ; Adresa cursora MOV LCD_DATA,A CALL SendCmd RET ;---------------------------------------------------------------- ;---------------------------------------------------------------- Meri_Vreme: MOV LCD_DATA,#10000000B CALL SendCmd MOV A,SEC CALL Print_Broj INC SEC MOV A,SEC ADD A,#196 ; > 60 JNC M_v_ex MOV SEC,#0 ; SETB PRINT_F4 ; SETB EEPROM INC MIN MOV A,MIN ADD A,#196 ; > (60) JNC M_v_ex MOV MIN,#0 INC SAT MOV A,SAT ADD A,#156 ; > (100) JNC M_v_ex ; CALL Proc_End M_v_ex: RET ;-------------------------------------------------- ;----------------------------------------------------------- Tastatura: ;Procedura za ispitivanje tastera MOV K_SHIFT,#0FFh MOV K_CODE,#0FFh MOV KEY_COD,#0h MOV KEY_CNT,#08 MOV KEY_ADR,#00011111B Loop_Key: MOV P1,KEY_ADR nop NOP MOV A,P1 CPL A ANL A,#00011111B JZ Nema_promene MOV MEM_0,A MOV MEM_1,KEY_COD Key_3key: INC K_SHIFT MOV A,K_SHIFT JNZ Izadji Nadji_taster: MOV A,#8 ADD A,MEM_1 MOV MEM_1,A MOV A,MEM_0 CLR C RRC A MOV MEM_0,A JNC Nadji_taster MOV K_SHIFT,K_CODE MOV K_CODE,MEM_1 MOV A,MEM_0 JNZ Key_3key Nema_promene: INC KEY_COD MOV A,#00100000B ADD A,KEY_ADR MOV KEY_ADR,A DJNZ KEY_CNT,Loop_Key No_key: MOV A,K_CODE INC A JZ Izlaz MOV A,K_CODE CJNE A,#0Ah,N_Test_Shift1 MOV A,K_SHIFT INC A JZ Izlaz MOV A,K_CODE ;Caps je pritisnut MOV K_CODE,K_SHIFT ;Zameni Shift i Code MOV K_SHIFT,A JMP N_Test_Shift2 N_Test_Shift1: CJNE A,#10h,N_Test_Shift2 JMP Izlaz N_Test_Shift2: MOV A,K_SHIFT INC A JZ No_shift_key MOV A,K_SHIFT CJNE A,#0Ah,N_Test_Shift3 MOV DPTR,#Tabla_Taster_1 JMP Nastavi_Test N_Test_Shift3: CJNE A,#10h,Izlaz MOV DPTR,#Tabla_Taster_2 JMP Nastavi_Test No_shift_key: JB C_LOCK,Caps_ON MOV DPTR,#Tabla_Taster_0 ;Caps_OFF JMP Nastavi_Test Caps_ON: MOV DPTR,#Tabla_Taster_3 ;Caps_ON Nastavi_Test: CALL Test_Key RET Izadji: Izlaz: MOV KS0,#0FFh Izlaz2: RET ;---------------------------------------------------------------- Izlaz_Test_K2: RET Test_Key: MOV A,K_CODE CJNE A,KS0,K_New ;K_Reppeat: ; MOV KS1,#5 ;Kada se otpusti taster DJNZ KS2,Izlaz_Test_K2 MOV KS2,#5 ;Reppeat svake 0,1sec MOV A,KS3 JMP Isti_taster K_New: MOV KS0,A ; MOV KS1,#5 MOV KS2,#35 ;Novi taster cekaj 0,7sec MOV KS3,A Isti_taster: MOVC A,@A+DPTR ; CALL Decode_Karakter ;Decode_Karakter CJNE A,#1,Dalje_1 JMP Izlaz_Test_K Dalje_1: CJNE A,#2,Dalje_2 JMP Izlaz_Test_K Dalje_2: CJNE A,#13,Dalje_10h ;Enter: CALL Buffer_Mem CALL Posalji_RS232 MOV LCD_DATA,#10000000B CALL SendCmd MOV A,#(256-MAX_LINE) ;Max broj linija u MEM ADD A,BR_LINE_OUT JC Preskok_Kusor_10 INC BR_LINE_OUT Preskok_Kusor_10: CALL Mem_Buffer CALL CLR_BUFFER MOV POS,#0 SETB P_TASTER JMP Izlaz_Test_K Dalje_10h: CJNE A,#11h,Dalje_11h ;EDIT: JNB EDIT,Edit_set CLR EDIT CALL Print_Edit_Clr JMP Izlaz_Test_K Edit_set: SETB EDIT CALL Print_Edit_Set JMP Izlaz_Test_K Dalje_11h: CJNE A,#12h,Dalje_12h ;CAPS LOCK: JNB C_LOCK,Lock_set CLR C_LOCK JMP Izlaz_Test_K Lock_set: SETB C_LOCK JMP Izlaz_Test_K Dalje_12h: CJNE A,#13h,Dalje_13h ;INSERT: JNB INSERT,Insert_set CLR INSERT JMP Izlaz_Test_K Insert_set: SETB INSERT JMP Izlaz_Test_K Dalje_13h: CJNE A,#14h,Dalje_14h CALL Shift_Insert MOV R1,POS MOV A,#32 MOVX @R1,A SETB P_TASTER JMP Izlaz_Test_K Dalje_14h: CJNE A,#15h,Dalje_15h ;Dole ; MOV LCD_DATA,#00010000B ; CALL SendCmd JB EDIT,Preskok_Edit_Dole MOV A,BR_LINE_OUT JZ Preskok_Kusor_15 DEC BR_LINE_OUT Preskok_Kusor_15: CALL Mem_Buffer SETB P_TASTER JMP Izlaz_Test_K Preskok_Edit_Dole: MOV A,BR_LINE_IN JZ Preskok_Kusor_15_IN DEC BR_LINE_IN Preskok_Kusor_15_IN: CALL Mem_Buffer_IN SETB P_TASTER JMP Izlaz_Test_K Dalje_15h: CJNE A,#16h,Dalje_16h ;Gore ; MOV LCD_DATA,#00010100B ; CALL SendCmd JB EDIT,Preskok_Edit_Gore MOV A,#(256-MAX_LINE) ;Max broj linija u MEM ADD A,BR_LINE_OUT JC Preskok_Kusor_16 INC BR_LINE_OUT Preskok_Kusor_16: CALL Mem_Buffer SETB P_TASTER JMP Izlaz_Test_K Preskok_Edit_Gore: MOV A,#(256-MAX_LINE) ;Max broj linija u MEM ADD A,BR_LINE_IN JC Preskok_Kusor_16_IN INC BR_LINE_IN Preskok_Kusor_16_IN: CALL Mem_Buffer_IN SETB P_TASTER JMP Izlaz_Test_K Dalje_16h: CJNE A,#17h,Dalje_17h ;Levo ; MOV LCD_DATA,#00011000B ; CALL SendCmd MOV A,POS JZ Preskok_Kusor_17 DEC POS Preskok_Kusor_17: SETB P_TASTER JMP Izlaz_Test_K Dalje_17h: CJNE A,#18h,Dalje_18h ;Desno ; MOV LCD_DATA,#00011100B ; CALL SendCmd MOV A,#(256-MAX_LEN) ;Max broj chr u redu ADD A,POS JC Preskok_Kusor_18 INC POS Preskok_Kusor_18: SETB P_TASTER JMP Izlaz_Test_K Dalje_18h: CJNE A,#19h,Dalje_19h ;Back space MOV A,POS JZ Preskok_Kusor_19 CALL Shift_BS DEC POS Preskok_Kusor_19: SETB P_TASTER JMP Izlaz_Test_K Dalje_19h: CJNE A,#1Ah,Dalje_1Ah ;Delete MOV A,#1 ADD A,POS JC Preskok_Kusor_1A CALL Shift_Delete Preskok_Kusor_1A: SETB P_TASTER JMP Izlaz_Test_K Dalje_1Ah: MOV MEM,A ;Ubaci u BUFFER memoriju MOV A,#(256-MAX_LEN) ;Max broj chr u redu ADD A,POS JC Preskok_max JNB INSERT,Preskok_Insert CALL Shift_Insert Preskok_Insert: MOV P2,#0 MOV R1,POS MOV A,MEM MOVX @R1,A INC POS Preskok_max: SETB P_TASTER ; MOV LCD_DATA,A ; CALL SendChar K_End: Izlaz_Test_K: RET ;---------------------------------------------------------------- Shift_Insert: MOV R0,#(MAX_LEN-1) MOV R1,#MAX_LEN Loop_Insert: MOV P2,#0 MOVX A,@R0 MOVX @R1,A DEC R0 DEC R1 MOV A,R1 CJNE A,POS,Loop_Insert RET ;---------------------------------------------------------------- Shift_BS: MOV R0,POS DEC R0 MOV R1,POS Loop_BS: MOV P2,#0 MOVX A,@R1 MOVX @R0,A INC R0 INC R1 MOV A,R1 INC A CJNE A,MAX_LEN,Loop_BS RET ;---------------------------------------------------------------- Shift_Delete: MOV R0,POS MOV R1,POS INC R1 Loop_Delete: MOV P2,#0 MOVX A,@R1 MOVX @R0,A INC R0 INC R1 MOV A,R1 CJNE A,MAX_LEN,Loop_Delete RET RET ;---------------------------------------------------------------- Tabla_Taster_0: DB ' ',13 , 2 ,'p','0','a','q','1' DB ' ',13 , 2 ,'p','0','a','q','1' DB 1 ,'l','z','o','9','s','w','2' DB 'm','k','x','i','8','d','e','3' DB 'n','j','c','u','7','f','r','4' DB 'b','h','v','y','6','g','t','5' Tabla_Taster_1: DB ' ',13 , 2 ,'P',1Ah,'A','Q',11h DB ' ',13 , 2 ,'P',1Ah,'A','Q',11h DB 1 ,'L','Z','O',19h,'S','W',12h DB 'M','K','X','I',18h,'D','E',13h DB 'N','J','C','U',17h,'F','R',14h DB 'B','H','V','Y',16h,'G','T',15h Tabla_Taster_2: DB ' ',13 , 2 ,'"','_',0DFh,7Fh,'!' DB ' ',13 , 2 ,'"','_',0DFh,7Fh,'!' DB 1 ,'=',':',';',')',7Ch,0A5h,'@' DB '.','+',60h,0E8h,'(',5Ch,7Eh,'#' DB ',','-','?',']',27h,'{','<','$' DB '*','^','/','[','&','}','>','%' Tabla_Taster_3: DB ' ',13 , 2 ,'P','0','A','Q','1' DB ' ',13 , 2 ,'P','0','A','Q','1' DB 1 ,'L','Z','O','9','S','W','2' DB 'M','K','X','I','8','D','E','3' DB 'N','J','C','U','7','F','R','4' DB 'B','H','V','Y','6','G','T','5' ;---------------------------------------------------------------- Print_Broj: MOV B,#10 DIV AB CALL SendChar2 MOV A,B CALL SendChar2 RET ;-------------------------------------------------- Posalji_RS232: ; MOV A,#0AAh ; Zaglavlje1 ; CALL RS_out ; MOV A,#0AAh ; Zaglavlje2 ; CALL RS_out MOV R1,#79 MOV R0,#00h RS_loop: MOV P2,#0 MOVX A,@R0 CALL RS_out INC R0 DJNZ R1,RS_loop MOV A,#13 ;CR CALL RS_out MOV A,#10 ;LF CALL RS_out RET RS_out: JNB TI,RS_out CLR TI MOV SBUF,A RET ;---------------------------------------------------------------- ;---------------------------------------------------------------- Pocetak1: MOV SP,#80h CLR SHIFT_L CLR SHIFT_D CALL LCDinit CALL CLR_BUFFER MOV KS0,#0FFh MOV KS1,#5 MOV KS2,#70 ;Novi taster cekaj 0,7sec MOV POS,#0 MOV POS_IN,#80h MOV BR_LINE_OUT,#0 MOV BR_LINE_IN,#0 MOV FLAGS1,#0 MOV FLAGS2,#0 MOV LCD_DATA,#10000000B CALL SendCmd MOV DPTR,#Mes_Pocetak1 CALL Mesage_LCD1 MOV DPTR,#Mes_Pocetak2 CALL Mesage_LCD2 ; CALL Print_setup ; Fosc=11.0592 MHz ; Timer_1=Mod_2, C/T=0 ; TH1 SMOD ; 1200 Bauda - E8h 0 ; 2400 Bauda - F4h 0 ; 4800 Bauda - FAh 0 ; 9600 Bauda - FDh 0 ;19200 Bauda - FDh 1 MOV PCON,#00000000B MOV TH1,#0E8h ; 1200 Bauda Pocetak4: MOV TL0,#0 MOV TH0,#76 ; Poziva interapt svakih 50ms MOV IP,#00000010B ; Set T0 Interupt to High priority MOV IE,#10000010B ; Enable All Interupt, Enable T0 Interupt ; MOV TMOD,#00010001B ; TR1 = MOD1, TR0 = MOD1 ; MOV TCON,#00010000B ; Start TR0 MOV SCON,#01000010B ; Mod_1: 8-bit UART & SETB TI MOV TMOD,#00100001B ; T1 = MOD2, T0 = MOD1 MOV TCON,#11010000B ; Start T0,T1 SETB TR0 ; Start T0 SETB TR1 ; Start T1 SETB REN ; Enable RX kod Serijskog ;---------------------------------------------------------------- Pocetak2: RS_in: JNB RI,RS_in CLR RI MOV A,SBUF MOV MEM_IN,A ;Ubaci u privremenu memoriju ;Ispitaj dali je kraj reda CJNE A,#13,Dalje_CR ;CR JMP RS_in Dalje_CR: CJNE A,#10,Dalje_LF ;LF CALL Buffer_Mem_IN CALL CLR_BUFFER_IN MOV A,#(256-MAX_LINE) ;Max broj linija u MEM ADD A,BR_LINE_IN JC Preskok_LF INC BR_LINE_IN Preskok_LF: MOV POS_IN,#80h MOV LCD_DATA,#10000000B CALL SendCmd ; SETB P_TASTER Dalje_LF: MOV A,#(128-MAX_LEN) ;Max broj chr u redu ADD A,POS_IN JC Preskok_max_IN MOV P2,#0 MOV R1,POS_IN MOV A,MEM_IN MOVX @R1,A INC POS_IN MOV LCD_DATA,A CALL SendChar Preskok_max_IN: JMP Pocetak2 ;---------------------------------------------------------------- LCDinit: MOV DPTR,#LCD_W_ADDR MOV A,#00111000B MOVX @DPTR,A LCALL Delay LCALL Delay LCALL Delay LCALL Delay LCALL Delay MOV A,#00111000B MOVX @DPTR,A LCALL Delay MOV A,#00111000B MOVX @DPTR,A LCALL Delay MOV LCD_DATA,#00001111B ; Display on, cursor on LCALL SendCmd MOV LCD_DATA,#00000001B ; Clear display LCALL SendCmd MOV LCD_DATA,#00000110B ; Set entry mode inc, no shift LCALL SendCmd MOV LCD_DATA,#10000000B ; Adresa = 00 LCALL SendCmd RET ;-------------------------------------------------------------- SendChar1: MOV A,@R0 SendChar2: ADD A,#48 SendChar3: MOV LCD_DATA,A SendChar: LCALL Busy MOV DPTR,#LCD_W_DATA MOV A,LCD_DATA MOVX @DPTR,A RET ;-------------------------------------------------------------- SendCmd: LCALL Busy MOV DPTR,#LCD_W_ADDR MOV A,LCD_DATA MOVX @DPTR,A RET ;-------------------------------------------------------------- Busy: MOV DPTR,#LCD_R_ADDR Hop1: MOVX A,@DPTR JB 0E7H,Hop1 ; ? ACC.7=1 RET ;------------------------- Pauza ------------------------------------- Delay: MOV LCD_CNT,#0 Hop4: nop nop DJNZ LCD_CNT,Hop4 RET ;-------------------------------------------------------------- CLR_BUFFER: MOV A,#32 MOV R2,#MAX_LEN+1 MOV DPTR,#0 Loop_Red02: MOVX @DPTR,A INC DPTR DJNZ R2,Loop_Red02 RET ;-------------------------------------------------------------- CLR_BUFFER_IN: MOV A,#32 MOV R2,#MAX_LEN+1 MOV DPTR,#80h Loop_Red03: MOVX @DPTR,A INC DPTR DJNZ R2,Loop_Red03 RET ;-------------------------------------------------------------- Print_setup: MOV LCD_DATA,#10000000B CALL SendCmd MOV LCD_DATA,#'Y' CALL SendChar MOV LCD_DATA,#'T' CALL SendChar MOV LCD_DATA,#'2' CALL SendChar MOV LCD_DATA,#'F' CALL SendChar MOV LCD_DATA,#'S' CALL SendChar MOV LCD_DATA,#'G' CALL SendChar MOV LCD_DATA,#' ' CALL SendChar RET ;---------------------------------------------------------------- Mesage_LCD1: MOV M_DPL,DPL MOV M_DPH,DPH MOV LCD_DATA,#10000000B CALL SendCmd MOV DPL,M_DPL MOV DPH,M_DPH MOV R2,#16 Mes_Print_lcd1: CLR A MOVC A,@A+DPTR MOV LCD_DATA,A MOV M_DPL,DPL MOV M_DPH,DPH CALL SendChar MOV DPL,M_DPL MOV DPH,M_DPH INC DPTR DJNZ R2,Mes_Print_lcd1 RET ;---------------------------------------------------------------- Mesage_LCD2: MOV M_DPL,DPL MOV M_DPH,DPH MOV LCD_DATA,#11000000B CALL SendCmd MOV DPL,M_DPL MOV DPH,M_DPH MOV R2,#16 Mes_Print_lcd2: CLR A MOVC A,@A+DPTR MOV LCD_DATA,A MOV M_DPL,DPL MOV M_DPH,DPH CALL SendChar MOV DPL,M_DPL MOV DPH,M_DPH INC DPTR DJNZ R2,Mes_Print_lcd2 RET ;--------------------------------------------------------------------------- MOV LCD_DATA,#00001111B ; Display on, cursor on CALL SendCmd MOV LCD_DATA,#00001100B ; Display on, cursor off CALL SendCmd ;--------------------------------------------------------------------------- Buffer_Mem: ;A=2+BR_LINE_OUT MOV B,#2 ;(OUT_MEM/128) MOV A,BR_LINE_OUT ADD A,B ;DPTR=A*128 MOV B,#128 MUL AB MOV DPL,A MOV DPH,B MOV R0,#0 MOV R1,MAX_LEN Loop_Buff_Mem: MOV P2,#0 MOVX A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R1,Loop_Buff_Mem ; Zavrsi liniju sa 13,10,0 MOV A,#13 MOVX @DPTR,A INC DPTR MOV A,#10 MOVX @DPTR,A INC DPTR MOV A,#0 MOVX @DPTR,A RET ;--------------------------------------------------------------------------- Mem_Buffer: ;A=2+BR_LINE_OUT MOV B,#2 ;(OUT_MEM/128) MOV A,BR_LINE_OUT ADD A,B ;DPTR=A*128 MOV B,#128 MUL AB MOV DPL,A MOV DPH,B MOV R0,#0 MOV R1,MAX_LEN Loop_Mem_Buff: MOV P2,#0 MOVX A,@DPTR MOVX @R0,A INC R0 INC DPTR DJNZ R1,Loop_Mem_Buff RET ;--------------------------------------------------------------------------- Mem_Buffer_IN: ;A=2+BR_LINE_IN MOV B,#130 ;(IN_MEM/128) MOV A,BR_LINE_IN ADD A,B ;DPTR=A*128 MOV B,#128 MUL AB MOV DPL,A MOV DPH,B MOV R0,#0 MOV R1,MAX_LEN Loop_Mem_Buff_IN: MOV P2,#0 MOVX A,@DPTR MOVX @R0,A INC R0 INC DPTR DJNZ R1,Loop_Mem_Buff_IN RET ;--------------------------------------------------------------------------- Buffer_Mem_IN: ;A=2+BR_LINE_IN MOV B,#130 ;(IN_MEM/128) MOV A,BR_LINE_IN ADD A,B ;DPTR=A*128 MOV B,#128 MUL AB MOV DPL,A MOV DPH,B MOV R0,#80h MOV R1,MAX_LEN Loop_Buff_Mem_IN: MOV P2,#0 MOVX A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R1,Loop_Buff_Mem_IN ; Zavrsi liniju sa 13,10,0 MOV A,#13 MOVX @DPTR,A INC DPTR MOV A,#10 MOVX @DPTR,A INC DPTR MOV A,#0 MOVX @DPTR,A RET ;--------------------------------------------------------------------------- Print_Edit_Set: MOV DPTR,#Mes_Edit1 CALL Mesage_LCD1 MOV LCD_DATA,#11000000B CALL SendCmd MOV LCD_DATA,#'L' CALL SendChar MOV LCD_DATA,#'I' CALL SendChar MOV LCD_DATA,#'N' CALL SendChar MOV LCD_DATA,#'E' CALL SendChar MOV LCD_DATA,#':' CALL SendChar MOV LCD_DATA,#' ' CALL SendChar MOV A,BR_LINE_IN CALL Print_Bin MOV LCD_DATA,#' ' CALL SendChar MOV LCD_DATA,#'/' CALL SendChar MOV LCD_DATA,#' ' CALL SendChar MOV A,#MAX_LINE CALL Print_Bin MOV LCD_DATA,#' ' CALL SendChar RET ;--------------------------------------------------------------------------- Print_Edit_Clr: MOV DPTR,#Mes_Edit0 CALL Mesage_LCD1 MOV LCD_DATA,#11000000B CALL SendCmd MOV LCD_DATA,#'L' CALL SendChar MOV LCD_DATA,#'I' CALL SendChar MOV LCD_DATA,#'N' CALL SendChar MOV LCD_DATA,#'E' CALL SendChar MOV LCD_DATA,#':' CALL SendChar MOV LCD_DATA,#' ' CALL SendChar MOV A,BR_LINE_OUT CALL Print_Bin MOV LCD_DATA,#' ' CALL SendChar MOV LCD_DATA,#'/' CALL SendChar MOV LCD_DATA,#' ' CALL SendChar MOV A,#MAX_LINE CALL Print_Bin MOV LCD_DATA,#' ' CALL SendChar RET ;------------------------- Konverzija BIN -> BCD --------------------- Print_Bin: CALL BinBCD MOV A,OP_1 CALL SendChar2 MOV A,OP_0 CALL SendChar2 MOV A,B CALL SendChar2 RET ;--------------------------------------------------------------------------- BinBCD: MOV B,#100 DIV AB MOV OP_1,A MOV A,#10 XCH A,B DIV AB MOV OP_0,A RET ;--------------------------------------------------------------------------- Mes_Pocetak1: DB 'YT2FSG ' Mes_Pocetak2: DB 'MINI-TERMINAL ' Mes_Edit0: DB 'Predajna MEM ' Mes_Edit1: DB 'Prijemna MEM ' END