DELAY: MOV R0,#200 LAP: MOV R1,#200 LAP2: NOP NOP NOP DJNZ R1,LAP2 DJNZ R0,LAP RET END
II. PHN LED N LNH QUAY.
ORG 0000H MAIN:; Bat dau chuong trinh chinh CALL CTA;Goi chuong trinh con sang dan tu tren xuong duoi CALL CTB;Goi chuong trinh con sang dan tu duoi len tren JMP MAIN ;-----------chuong trinh con sang dan tu tren xuong duoi-------------------------- CTA: MOV A,#00H;Thanh ghi A la 00000000 LAP:;Nhan cua vong lap SETB C;Thit lap co nho C len 1 RLC A;Quay trai co C co nho MOV P2,A;Dua gia tri vao P2 CALL DELAY;Tao thoi gian tre de thay hieu ung CJNE A,#0FFH,LAP;Kiem tra neu chua bang 11111111 thi nhay den nhan LAP RET
;-------------chuong trinh con sang dan tu duoi len tren------------------------- CTB: MOV A,#00H; dua gia tri 00000000 vao thanh ghi tich luy A LAP1: ; nhan vong lap SETB C ; Thiet lap co nho C len 1 RRC A ; quay phai thanh ghi A co co nho MOV P2,A ; chuyen gia tri thanh ghi A vua quay xuat ra Port 2 CALL DELAY;goi chuong trinh tre de thay hieu ung led CJNE A,#0FFH,LAP1;Kiem tra thanh ghi A da bang 11111111 chua, neu chua bang thin hay den LAP1 RET ;----Chuong trinh tao thoi gian tre----- DELAY: MOV R0,#200 LOOP: MOV R1,#210 LOOP1: NOP DJNZ R1,LOOP1 DJNZ R0,LOOP RET END III. LED N LY BNG M ORG 00H MAIN: CALL CTA; sang dan qua trai CALL CTB; sang dan qua phai JMP MAIN ;***************************************** CTA: MOV R0,#00H ;Bien dem so trang thai hien thi MOV DPTR,#MALED ;Nap di chi vung du lieu LABEL: MOV A,R0 ; Chuyen gia tri thanh ghi R0 vao thanh ghi A MOVC A,@A+DPTR ; Lay du lieu tu vung nho MOV P2,A ;Hien thi CALL DELAY INC R0 ; Lay du lieu ke tiep CJNE R0,#9,LABEL ; Kiem tra so du trang thai hien thi RET ;***************************************** CTB: MOV R0,#00H MOV DPTR,#MALED1 LABEL1: MOV A,R0 MOVC A,@A+DPTR MOV P2,A CALL DELAY INC R0 CJNE R0,#9,LABEL1 RET ;****************************************** MALED: DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH; co 9 ma led CTA ;00000000b,00000001b,00000011b, MALED1: DB 00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH; 9 ma led CTB ;----Chuong trinh tao thoi gian tre----- DELAY: MOV R3,#200 LOOP: MOV R2,#250 LOOP1: NOP DJNZ R2,LOOP1 DJNZ R3,LOOP RET END IV. DNG IC 74HC595
ORG 00H MAIN: CALL CTA;goi chuong trinh con CALL CTB CALL CTC JMP MAIN
CTA: ;sang dan led MOV R1,#8;quet 8 led LAP: SETB P2.0;thiet lap bit chan data len 1 cho led sang CALL DELAY SETB P2.1;tao xung mo cho bit vao chan SH CALL DELAY CLR P2.1;tao xung dong khong cho bit vao chan SH CALL DELAY SETB P2.2;tao xung mo ST cho bit xuat ra cac chan led CALL DELAY CLR P2.2;tao xung dong ST khong cho bit xuat ra cac chan led CALL DELAY DJNZ R1,LAP
;tat dan led MOV R1,#8 LAP1: CLR P2.0;thiet lap bit chan data len 1 cho led sang CALL DELAY SETB P2.1 CALL DELAY CLR P2.1 CALL DELAY SETB P2.2 CALL DELAY CLR P2.2 CALL DELAY DJNZ R1,LAP1 RET
;QUET HANG 4 MOV P0,#11110111B JNB P0.4,PHIM13 ; ON JNB P0.5,PHIM14 ;SO 0 JNB P0.6,PHIM15 ;KT = JNB P0.7,PHIM16 ;KT + LJMP MAIN
PHIM1: CALL MS1 LJMP MAIN PHIM2: CALL MS2 LJMP MAIN PHIM3: CALL MS3 LJMP MAIN PHIM4: CALL MS4 LJMP MAIN PHIM5: CALL MS5 LJMP MAIN PHIM6: CALL MS6 LJMP MAIN PHIM7: CALL MS7 LJMP MAIN PHIM8: CALL MS8 LJMP MAIN PHIM9: CALL MS9 LJMP MAIN PHIM10: CALL MS10 LJMP MAIN PHIM11: CALL MS11 LJMP MAIN PHIM12: CALL MS12 LJMP MAIN PHIM13: CALL MS13 LJMP MAIN PHIM14: CALL MS14 LJMP MAIN PHIM15: CALL MS15 LJMP MAIN PHIM16: CALL MS16 LJMP MAIN MS1: MOV DPTR,#MASO1 CALL CTHT RET MS2: MOV DPTR,#MASO2 CALL CTHT RET MS3: MOV DPTR,#MASO3 CALL CTHT RET MS4: MOV DPTR,#MASO4 CALL CTHT RET MS5: MOV DPTR,#MASO5 CALL CTHT RET MS6: MOV DPTR,#MASO6 CALL CTHT RET MS7: MOV DPTR,#MASO7 CALL CTHT RET MS8: MOV DPTR,#MASO8 CALL CTHT RET MS9: MOV DPTR,#MASO9 CALL CTHT RET MS10: MOV DPTR,#MASO10 CALL CTHT RET MS11: MOV DPTR,#MASO11 CALL CTHT RET MS12: MOV DPTR,#MASO12 CALL CTHT RET MS13: MOV DPTR,#MASO13 CALL CTHT RET MS14: MOV DPTR,#MASO14 CALL CTHT RET MS15: MOV DPTR,#MASO15 CALL CTHT RET MS16: MOV DPTR,#MASO16 CALL CTHT RET CTHT:;CHUONG TRINH HIEN THI MOV R2,#20 QUET: MOV R0,#0 MOV R1,#01H BACK_1: MOV A,R0 MOVC A,@A+DPTR MOV P2,A MOV P3,R1 CALL DELAY MOV P3,#00H MOV A,R1 RL A MOV R1,A INC R0 CJNE R0,#8,BACK_1 DJNZ R2,QUET RET
DELAY: PUSH 01 MOV R1,#50 DJNZ R1,$ POP 01 RET
MASO1: DB 0FFH,0FFH,0BDH,0DDH,0EDH,0F5H,0F9H,0FFH ;S7 MASO2: DB 0FFH,89H,76H,76H,76H,89H,0FFH,0FFH ;S8 MASO3: DB 0FFH,71H,6EH,6EH,0AEH,0C1H,0FFH,0FFH ;S9 MASO4: DB 0FFH,0F7H,0F7H,0D5H,0F7H,0F7H,0FFH,0FFH ;KT CHIA MASO5: DB 0FFH,0E7H,0EBH,0EDH,80H,0EFH,0FFH,0FFH ;S4 MASO6: DB 0FFH,0FFH,0B8H,0BAH,0BAH,0BAH,0C7H,0FFH ;S5 MASO7: DB 0FFH,0C7H,0B3H,0B5H,0B6H,0CFH,0FFH,0FFH ;S6 MASO8: DB 0FFH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,0FFH ;KT NHAN MASO9: DB 0FFH,0F7H,0BBH,81H,0BFH,0FFH,0FFH,0FFH ;S1 MASO10: DB 0FFH,0BDH,9EH,0AEH,0B6H,0B9H,0FFH,0FFH ;S2 MASO11: DB 0FFH,7EH,76H,72H,74H,8EH,0FFH,0FFH ;S3 MASO12: DB 0FFH,0F7H,0F7H,0F7H,0F7H,0F7H,0FFH,0FFH ;KT - MASO13: DB 0C3H,0BDH,0C3H,83H,0F7H,0EFH,0DFH,83H ;ON MASO14: DB 0FFH,83H,7DH,7DH,7DH,83H,0FFH,0FFH ; S0 MASO15: DB 0FFH,0FFH,0EBH,0EBH,0EBH,0EBH,0FFH,0FFH ;KT = MASO16: DB 0FFH,0F7H,0F7H,0C1H,0F7H,0F7H,0FFH,0FFH ;KT +
END 3. Matrix phm + Led 7 thanh
;chng trnh code asm ;Design By Chipkool_online ;SV H Kinh t - K Thut cng Nghip ORG 00H MAIN: ;QUET HANG 1 MOV P3,#11111110B JNB P3.4,PHIM7 JNB P3.5,PHIM8 JNB P3.6,PHIM9 JNB P3.7,PHIM10
;*******************HIEN THI CHAY CHU DHKTKTCN CTA: MOV A,#06H ; con tro dich phai ACALL CSTROBE MOV A,#80H ;chuyen Con tro den dong 1 vi tri 0 ACALL CSTROBE MOV DPTR,#MYDATA ;Dua con tro du lieu toi bang
ORG 250H MYDATA: DB "DAI HOC KINH TE KY THUAT CONG NGHIEP"
END
; *** File Name: PDCLK.ASM ; *** Project: Programmable Digital Clock with Alarm ; *** Author: MICROPIC ; *** Date: 04/01/2007 ; *** Processor: Atmel AT89C51 Microcontroller (Compatible With MCS-51) ; *** Timekeeper: DS1307 I2C Serial Timekeeper IC ; *** Display: 16 characters x 2 lines LCD ;************************************************************** ; LCD Connections LCD DATA P2 ; define LCD data port on port 1 Busy BIT LCD.7 ; define LCD busy flag EN BIT P3.5 ; define LCD enable pin on port 2.2 RW BIT P3.6 ; define LCD register select pin on port 2.0 RS BIT P3.7 ; define LCD read/write pin on port 2.1 ;************************************************************** ; KEYS UP BIT P1.3 DN BIT P1.2 Rel_Set BIT P3.4 T_Set BIT P3.2 A_Set BIT P3.3 ;************************************************************** Rel_Out BIT P1.4 ;************************************************************** ; I2C Connections SCL BIT P1.0 ; I2C serial clock line SDA BIT P1.1 ; I2C serial data line ;************************************************************** ; Slave Address SAW EQU 0D0H ; Slave address for write (DS1307) SAR EQU 0D1H ; Slave address for read (DS1307) ;************************************************************** BitCnt DATA 20H ; BIT COUNTER FOR I2C ROUTINES Sec DATA 21H ; SECONDS STORAGE RAM Min DATA 22H ; MINUTES STORAGE RAM Hour DATA 23H ; HOURS STORAGE RAM Day DATA 24H ; DAY STORAGE RAM Date DATA 25H ; DATE STORAGE RAM Month DATA 26H ; MONTH STORAGE RAM Year DATA 27H ; YEAR STORAGE RAM SQW DATA 28H ; SQUARE-WAVE CONTROL AL_Hour DATA 29H ; ALARM HOURS STORAGE RAM SPACE AL_Min DATA 2AH ; ALARM MINUTES STORAGE RAM SPACE Rel_H DATA 2BH ; RELAY HOURS STORAGE RAM SPACE (FOR ON) Rel_M DATA 2CH ; RELAY MINUTES STORAGE RAM SPACE (FOR ON) RH_Off DATA 2DH ; RELAY HOURS STORAGE RAM SPACE (FOR OFF) RM_Off DATA 2EH ; RELAY MINUTES STORAGE RAM SPACE (FOR OFF) Flags DATA 2FH ; FLAGS AL_Flag BIT Flags.0 ; ALARM FLAG RL_Flag BIT Flags.1 ; RELAY TIMER FLAG RL_On BIT FlagS.2 ;************************************************************** ; ***MACRO'S*** I2C_Delay MACRO NOP ENDM ;-------------------------------------------------------------- SCLHigh MACRO SETB SCL JNB SCL,$ ENDM ;-------------------------------------------------------------- D_Str MACRO ACALL Command LCALL Disp_Char ENDM ;-------------------------------------------------------------- CLR_LCD MACRO MOV A,#01H ACALL Command ENDM ;************************************************************** ORG 0000H ;-------------------------------------------------------------- CLR AL_Flag CLR RL_Flag CLR RL_On MOV SP,#2FH MOV SQW,#80H ACALL SQW_W ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#3FH ACALL I2C_Write ACALL I2C_Start MOV A,#SAR ACALL I2C_Write ACALL I2C_Read_Last ACALL I2C_Stop CJNE A,#'~',INIT LJMP LCD_I ;-------------------------------------------------------------- INIT: ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#3FH ACALL I2C_Write MOV A,#'~' ACALL I2C_Write MOV A,#00H ACALL I2C_Write ACALL I2C_Stop SJMP LCD_I ;-------------------------------------------------------------- RTC_Reset: MOV R0,#21H MOV R6,#07H ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#00H ACALL I2C_Write Loop1: MOV A,@R0 ACALL I2C_Write INC R0 DJNZ R6,Loop1 ACALL I2C_Stop RET ;-------------------------------------------------------------- AL_Off: CLR AL_Flag MOV SQW,#80H ACALL SQW_W CLR_LCD MOV A,#84H D_Str DB 'Alarm Off!',0 MOV A,#82H ACALL Command MOV A,#01H ACALL Data_Disp ACALL Delay ACALL RL_Logo SJMP Main ;-------------------------------------------------------------- Alarm_Set: JB AL_Flag,AL_Off CLR_LCD MOV A,#84H D_Str DB 'Set Alarm',0 MOV A,#82H ACALL Command MOV A,#01H ACALL Data_Disp ACALL Delay AJMP AH ;-------------------------------------------------------------- LCD_I: ACALL LCD_Initial ACALL CGR ;-------------------------------------------------------------- Main: ACALL Disp_C Start: ACALL Key_Scan Back1: MOV R0,#21H MOV R1,#0DH ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#00H ACALL I2C_Write ACALL I2C_Start MOV A,#SAR ACALL I2C_Write Loop: ACALL I2C_Read DJNZ R1,Loop ACALL I2C_Read_Last ACALL I2C_Stop ACALL Display ACALL Alarm_Check ACALL Relay_Check SJMP Start ;-------------------------------------------------------------- Key_Scan: JNB T_Set,Jump1 JNB A_Set,Alarm_Set JNB Rel_Set,Jump2 RET ;-------------------------------------------------------------- Jump1: LJMP Time_Set Jump2: SJMP Relay_Set ;-------------------------------------------------------------- Alarm_Check: JNB AL_Flag,CH MOV A,AL_Min CJNE A,Min,Alarm_Off MOV A,AL_Hour CJNE A,Hour,Alarm_Off ACALL Alarm_On CH: RET ;-------------------------------------------------------------- Alarm_Off: MOV SQW,#80H ACALL SQW_W RET ;-------------------------------------------------------------- RL_Off: CLR RL_Flag SETB Rel_Out CLR RL_On CLR_LCD MOV A,#84H D_Str DB 'Relay Off!',0 MOV A,#82H ACALL Command MOV A,#00H ACALL Data_Disp ACALL Delay ACALL AL_Logo SJMP Main ;-------------------------------------------------------------- SQW_W: ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#07H ACALL I2C_Write MOV A,SQW ACALL I2C_Write ACALL I2C_Stop RET ;-------------------------------------------------------------- Alarm_On: MOV SQW,#10H ACALL SQW_W RET ;-------------------------------------------------------------- Relay_Check: JNB RL_Flag,CH1 JB RL_On,Rel_Off MOV A,Rel_M CJNE A,Min,Relay_Off MOV A,Rel_H CJNE A,Hour,Relay_Off SETB RL_On ACALL Relay_On CH1: RET ;-------------------------------------------------------------- Relay_Off: SETB Rel_Out RET ;-------------------------------------------------------------- Relay_On: CLR Rel_Out RET ;-------------------------------------------------------------- Relay_Set: JB RL_Flag,RL_Off LJMP R_Set ;-------------------------------------------------------------- Rel_Off:MOV A,RM_Off CJNE A,Min,Relay_On MOV A,RH_Off CJNE A,Hour,Relay_On CLR RL_On ACALL Relay_Off CH2: RET ;-------------------------------------------------------------- Time_Set: CLR_LCD MOV A,#83H D_Str DB 'Set Hours:',0 MOV A,#0C7H ACALL Command MOV A,Hour MOV R7,A ACALL Disp_BCD JNB T_Set,$ I24: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KS24: JNB UP,Inc_Hour JNB DN,Dec_Hour JNB T_Set,Done_H SJMP KS24 Inc_Hour: NOP ACALL BCD_2_Hex INC A CJNE A,#18H,SH MOV A,#00H SH: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP I24 Dec_Hour: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,SH MOV A,#17H SJMP SH Done_H: JNB T_Set,$ MOV Hour,R7 ;-------------------------------------------------------------- Mint: CLR_LCD MOV A,#82H D_Str DB 'Set Minutes:',0 MOV A,#0C7H ACALL Command MOV A,Min MOV R7,A ACALL Disp_BCD JNB T_Set,$ M1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KSMIN: JNB UP,Inc_Min JNB DN,Dec_Min JNB T_Set,DoneMin SJMP KSMIN Inc_Min:NOP ACALL BCD_2_Hex INC A CJNE A,#3CH,SMin MOV A,#00H SMin: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP M1 Dec_Min:NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,SMin MOV A,#3BH SJMP SMin DoneMin:JNB T_Set,$ MOV Min,R7 ;-------------------------------------------------------------- CLR_LCD MOV A,#83H D_Str DB 'Set Days:',0 MOV A,#0C5H D_Str DB '* *',0 MOV A,#0C6H ACALL Command MOV A,Day PUSH ACC LCALL W_Day POP ACC JNB T_Set,$ D1: PUSH ACC MOV A,#0C6H ACALL Command POP ACC KSDAY: JNB UP,Inc_Day JNB DN,Dec_Day JNB T_Set,DoneDay SJMP KSDAY Inc_Day:NOP INC A CJNE A,#08H,SDay MOV A,#01H SDay: PUSH ACC LCALL W_Day POP ACC JNB UP,$ JNB DN,$ SJMP D1 Dec_Day:NOP DEC A CJNE A,#00H,SDay MOV A,#07H SJMP SDay DoneDay:JNB T_Set,$ MOV Day,A ;-------------------------------------------------------------- CLR_LCD MOV A,#83H D_Str DB 'Set Date:',0 MOV A,#0C7H ACALL Command MOV A,Date MOV R7,A ACALL Disp_BCD JNB T_Set,$ DA1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KSDAT: JNB UP,Inc_DAT JNB DN,Dec_DAT JNB T_Set,DoneDAT SJMP KSDAT Inc_DAT:NOP ACALL BCD_2_Hex INC A CJNE A,#20H,SDAT MOV A,#01H SDAT: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP DA1 Dec_DAT:NOP ACALL BCD_2_Hex DEC A CJNE A,#00H,SDAT MOV A,#1FH SJMP SDAT DoneDAT:JNB T_Set,$ MOV Date,R7 ;-------------------------------------------------------------- CLR_LCD MOV A,#83H D_Str DB 'Set Month:',0 MOV A,#0C7H ACALL Command MOV A,Month MOV R7,A ACALL Disp_BCD JNB T_Set,$ MM1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KSMON: JNB UP,Inc_MON JNB DN,Dec_MON JNB T_Set,DoneMON SJMP KSMON Inc_MON:NOP ACALL BCD_2_Hex INC A CJNE A,#0DH,SMON MOV A,#01H SMON: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP MM1 Dec_MON:NOP ACALL BCD_2_Hex DEC A CJNE A,#00H,SMON MOV A,#0CH SJMP SMON DoneMON:JNB T_Set,$ MOV Month,R7 ;-------------------------------------------------------------- CLR_LCD MOV A,#83H D_Str DB 'Set Year:',0 MOV A,#0C6H D_Str DB '20',0 MOV A,#0C8H ACALL Command MOV A,Year MOV R7,A ACALL Disp_BCD JNB T_Set,$ YY1: PUSH ACC MOV A,#0C8H ACALL Command POP ACC KSYY: JNB UP,Inc_YY JNB DN,Dec_YY JNB T_Set,DoneYY SJMP KSYY Inc_YY: NOP ACALL BCD_2_Hex INC A CJNE A,#64H,SYY MOV A,#00H SYY: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP YY1 Dec_YY: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,SYY MOV A,#63H SJMP SYY DoneYY: JNB T_Set,$ MOV Year,R7 MOV Sec,#00H ACALL RTC_Reset ACALL Done ACALL Disp_C ACALL RL_Logo ACALL AL_Logo LJMP Main ;-------------------------------------------------------------- Done: CLR_LCD MOV A,#86H D_Str DB 'Done!',0 ACALL Delay RET ;-------------------------------------------------------------- Delay: MOV R2,#0FFH MOV R3,#14H LP3: MOV R2,#0FFH LP2: MOV R5,#0FFH LP1: DJNZ R5,LP1 DJNZ R2,LP2 DJNZ R3,LP3 RET ;-------------------------------------------------------------- AH: CLR_LCD MOV A,#83H D_Str DB 'Set Hours:',0 MOV A,#0C7H ACALL Command MOV A,AL_Hour MOV R7,A ACALL Disp_BCD ALH1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC ALH2: JNB UP,Inc_AL_Hour JNB DN,Dec_AL_Hour JNB A_Set,DoneALH SJMP ALH2 Inc_AL_Hour: NOP ACALL BCD_2_Hex INC A CJNE A,#18H,Z_AL_H MOV A,#00H Z_AL_H: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP ALH1 Dec_AL_Hour: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,Z_AL_H MOV A,#17H SJMP Z_AL_H DoneALH:JNB A_Set,$ MOV AL_Hour,R7 CLR_LCD MOV A,#82H D_Str DB 'Set Minutes:',0 MOV A,#0C7H ACALL Command MOV A,AL_Min MOV R7,A ACALL Disp_BCD JNB A_Set,$ ALM1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC ALM2: JNB UP,Inc_AL_Min JNB DN,Dec_AL_Min JNB A_Set,DoneAL_Min SJMP ALM2 Inc_AL_Min: NOP ACALL BCD_2_Hex INC A CJNE A,#3CH,SAL_Min MOV A,#00H SAL_Min:ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP ALM1 Dec_AL_Min: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,SAL_Min MOV A,#3BH SJMP SAL_Min DoneAL_Min: JNB A_Set,$ MOV AL_Min,R7 SETB AL_Flag ACALL ALT_Done ACALL Done ACALL RL_Logo ACALL AL_Logo LJMP Main ;-------------------------------------------------------------- R_Set: CLR_LCD MOV A,#81H D_Str DB ' Set Timer(ON)',0 MOV A,#80H ACALL Command MOV A,#00H ACALL Data_Disp ACALL Delay CLR_LCD MOV A,#83H D_Str DB 'Set Hours:',0 MOV A,#0C7H ACALL Command MOV A,Rel_H MOV R7,A ACALL Disp_BCD JNB Rel_Set,$ RTH1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KHREL: JNB UP,Inc_Rel_H JNB DN,Dec_Rel_H JNB Rel_Set,DoneRel_H SJMP KHREL Inc_Rel_H: NOP ACALL BCD_2_Hex INC A CJNE A,#18H,HRel MOV A,#00H HRel: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP RTH1 Dec_Rel_H: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,HRel MOV A,#17H SJMP HRel DoneRel_H: JNB Rel_Set,$ MOV Rel_H,R7 CLR_LCD MOV A,#82H D_Str DB 'Set Minutes:',0 MOV A,#0C7H ACALL Command MOV A,Rel_M MOV R7,A ACALL Disp_BCD JNB Rel_Set,$ RTM1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KMREL: JNB UP,Inc_Rel_M JNB DN,Dec_Rel_M JNB Rel_Set,DoneRel_M SJMP KMREL Inc_Rel_M: NOP ACALL BCD_2_Hex INC A CJNE A,#3CH,MRel MOV A,#00H MRel: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP RTM1 Dec_Rel_M: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,MRel MOV A,#3BH SJMP MRel DoneRel_M: JNB Rel_Set,$ MOV Rel_M,R7 Off: CLR_LCD MOV A,#81H D_Str DB ' Set Timer(OFF)',0 MOV A,#80H ACALL Command MOV A,#00H ACALL Data_Disp ACALL Delay CLR_LCD MOV A,#83H D_Str DB 'Set Hours:',0 MOV A,#0C7H ACALL Command MOV A,RH_Off MOV R7,A ACALL Disp_BCD JNB Rel_Set,$ RTHF1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KHFREL: JNB UP,Inc_Rel_HF JNB DN,Dec_Rel_HF JNB Rel_Set,DoneRel_HF SJMP KHFREL Inc_Rel_HF: NOP ACALL BCD_2_Hex INC A CJNE A,#18H,HFRel MOV A,#00H HFRel: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP RTHF1 Dec_Rel_HF: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,HFRel MOV A,#17H SJMP HFRel DoneRel_HF: JNB Rel_Set,$ MOV RH_Off,R7 CLR_LCD MOV A,#82H D_Str DB 'Set Minutes:',0 MOV A,#0C7H ACALL Command MOV A,RM_Off MOV R7,A ACALL Disp_BCD JNB Rel_Set,$ RFTM1: PUSH ACC MOV A,#0C7H ACALL Command POP ACC KFMREL: JNB UP,Inc_Rel_MF JNB DN,Dec_Rel_MF JNB Rel_Set,DoneRel_MF SJMP KFMREL Inc_Rel_MF: NOP ACALL BCD_2_Hex INC A CJNE A,#3CH,MFRel MOV A,#00H MFRel: ACALL Hex_2_BCD ACALL Disp_BCD JNB UP,$ JNB DN,$ SJMP RFTM1 Dec_Rel_MF: NOP ACALL BCD_2_Hex DEC A CJNE A,#00H-1,MFRel MOV A,#3BH SJMP MFRel DoneRel_MF: JNB Rel_Set,$ MOV RM_Off,R7 SETB RL_Flag ACALL ALT_Done ACALL Done ACALL RL_Logo ACALL AL_Logo LJMP Main ;-------------------------------------------------------------- RL_Logo:JNB RL_Flag,WE1 MOV A,#0CDH ACALL Command MOV A,#00H ACALL Data_Disp WE1: RET ;-------------------------------------------------------------- AL_Logo:JNB AL_Flag,WE2 MOV A,#0C2H ACALL Command MOV A,#01H ACALL Data_Disp WE2: RET ;-------------------------------------------------------------- ALT_Done: MOV R1,#29H MOV R3,#07H ACALL I2C_Start MOV A,#SAW ACALL I2C_Write MOV A,#08H ACALL I2C_Write LOOP4: MOV A,@R1 ACALL I2C_Write INC R1 DJNZ R3,LOOP4 ACALL I2C_Stop RET ;-------------------------------------------------------------- LCD_Initial: MOV A,#38H ACALL Command MOV A,#0CH ACALL Command CLR_LCD MOV A,#06H ACALL Command RET ;-------------------------------------------------------------- Display:MOV R1,#21H MOV A,#0CAH ACALL Command MOV A,@R1 ACALL Disp_BCD ; INC R1 MOV A,#0C7H ACALL Command MOV A,@R1 ACALL Disp_BCD ; INC R1 MOV A,#0C4H ACALL Command MOV A,@R1 ACALL Disp_BCD ; INC R1 MOV A,#80H ACALL Command MOV A,@R1 LCALL W_Day ; INC R1 MOV A,#86H ACALL Command MOV A,@R1 ACALL Disp_BCD ; INC R1 MOV A,#89H ACALL Command MOV A,@R1 ACALL Disp_BCD ; INC R1 MOV A,#8EH ACALL Command MOV A,@R1 ACALL Disp_BCD RET ;-------------------------------------------------------------- Hex_2_BCD: MOV B,#00001010B DIV AB MOV R3,B MOV B,#00010000B MUL AB ADD A,R3 MOV R7,A RET ;-------------------------------------------------------------- BCD_2_Hex: MOV B,#00010000B DIV AB MOV R3,B MOV B,#00001010B MUL AB ADD A,R3 RET ;-------------------------------------------------------------- Disp_BCD: PUSH ACC MOV R5,A ANL A,#11110000B SWAP A MOV DPTR,#Ascii_Code MOVC A,@A+DPTR ACALL Data_Disp MOV A,R5 ANL A,#00001111B MOVC A,@A+DPTR ACALL Data_Disp POP ACC RET ;-------------------------------------------------------------- Disp_C: MOV A,#80H D_Str DB ' / /20 ',0 MOV A,#0C0H ACALL Command MOV A,#'*' ACALL Data_Disp MOV A,#0C6H ACALL Command MOV A,#':' ACALL Data_Disp MOV A,#0C9H ACALL Command MOV A,#':' ACALL Data_Disp MOV A,#0CFH ACALL Command MOV A,#'*' ACALL Data_Disp RET ;-------------------------------------------------------------- CGR: MOV R4,#08H MOV R5,#40H MOV DPTR,#Clock ACALL WRI MOV R4,#08H MOV R5,#48H MOV DPTR,#Bell ACALL WRI RET ;-------------------------------------------------------------- WRI: CLR A ACALL Get_Ready MOV LCD,R5 CLR RS CLR RW SETB EN CLR EN INC R5 MOVC A,@A+DPTR ACALL Data_Disp INC DPTR DJNZ R4,WRI RET ;---------------------------------------; ; ************I2C Commands************* ; ;---------------------------------------; I2C_Start: SETB SCL SETB SDA I2C_Delay CLR SDA I2C_Delay CLR SCL RET ;-------------------------------------------------------------- I2C_Stop: CLR SDA SETB SCL I2C_Delay SETB SDA RET ;-------------------------------------------------------------- I2C_Write: MOV BitCnt,#08H I2C_Write_Loop: RLC A MOV SDA,C NOP SCLHigh CLR SCL DJNZ BitCnt,I2C_Write_Loop NOP SETB SDA NOP SETB SCL I2C_Delay MOV C,SDA CLR SCL NOP JNC Label ACALL I2C_Stop ACALL I2C_Start SJMP I2C_Write Label: RET ;-------------------------------------------------------------- I2C_Read_Dummy: SETB SDA CLR A MOV BitCnt,#08H I2C_Read_Loop: CLR SCL I2C_Delay SCLHigh MOV C,SDA RLC A DJNZ BitCnt,I2C_Read_Loop CLR SCL MOV @R0,A INC R0 RET ;-------------------------------------------------------------- I2C_Ack_Write: CLR SDA NOP SETB SCL I2C_Delay CLR SCL SETB SDA I2C_Delay RET ;-------------------------------------------------------------- I2C_Nack_Write: SETB SDA NOP SETB SCL I2C_Delay CLR SCL I2C_Delay RET ;-------------------------------------------------------------- I2C_Read: ACALL I2C_Read_Dummy ACALL I2C_Ack_Write RET ;-------------------------------------------------------------- I2C_Read_Last: ACALL I2C_Read_Dummy ACALL I2C_Nack_Write RET ;--------------------------------------; ; ************LCD CommandS*************; ;--------------------------------------; Command:ACALL Get_Ready MOV LCD,A CLR RS CLR RW SETB EN CLR EN RET ;-------------------------------------------------------------- Data_Disp: ACALL Get_Ready MOV LCD,A SETB RS CLR RW SETB EN CLR EN RET ;-------------------------------------------------------------- Get_Ready: SETB Busy CLR RS SETB RW Back: CLR EN SETB EN JB Busy,BACK RET ;-------------------------------------------------------------- Disp_Char: POP DPH POP DPL Print_Text: CLR A MOVC A,@A+DPTR CJNE A,#00H,Loop2 SJMP Return Loop2: MOV R4, A LCALL Data_Disp INC DPTR LJMP Print_Text Return: MOV A,#01H JMP @A+DPTR ;-------------------------------------------------------------- W_Day: CJNE A,#01H,MON LCALL Disp_Char DB 'Sun',0 RET MON: CJNE A,#02H,TUE LCALL Disp_Char DB 'Mon',0 RET TUE: CJNE A,#03H,WED LCALL Disp_Char DB 'Tue',0 RET WED: CJNE A,#04H,THU LCALL Disp_Char DB 'Wed',0 RET THU: CJNE A,#05H,FRI LCALL Disp_Char DB 'Thu',0 RET FRI: CJNE A,#06H,SAT LCALL Disp_Char DB 'Fri',0 RET SAT: CJNE A,#07H,WHAT LCALL Disp_Char DB 'Sat',0 RET WHAT: RET ;-------------------------------------------------------------- Ascii_Code: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;-------------------------------------------------------------- ;Icons Clock: DB 00H,0EH,15H,17H,11H,0EH,00H,00H Bell: DB 04H,0EH,0EH,0EH,1FH,00H,04H,00H ;-------------------------------------------------------------- END Mch ng h hn gi Sau phin bn Hng dn lm mch ng h thi gian thc Ver 1 - Khng hn gi mc trc - Thy my bn mun thm hn gi, Chip hm nay s thit k v hng dn cc bn lm mch ng h c hn gi test ngon...Lm chy lun v ngay khng phi xon...^^".Bn di l video chip test mch chy cc bn xem nh..Cn mch in update nt n gn ht trn mch ri,,ch vic lm thi. I.Hnh nh m phng mch thc hin trn phn mm Protues 7.10
Mch phin bn ny phi dng tng cng 6 nt.c thm nt OK v Alarm II.Nguyn liu chun b tin hnh thi cng. Cng ging nh bi hng dn trc cc bn chun b mua nhng th sau: -Chip AT89C52 -IC DS1307 - Loi tt s chy ng gi - Trn th trng c loi 10k v loi 40k - 2 t ha 10uF - 1 tu ha 470uF
-4 t gm 33pF
-1 thch anh 12Mhz
-1 thch anh 32Mhz - Loi tt s chy chun
-1 Chip 40 chn
- 1 ic 8 chn
-1 pin 3v
- 1 pin 3v
-6 nt bm nh
-10 in tr 1k
-4 in tr 10k
- 5 tr 100R
- 5 tr 330R
-4 led bo nt bm
- 1 LM7805
- 1 tr bng 103
-10 tranzitor C1815
- 6 led 7 on Anode chung loi b c 10 chn 2 hng..ring tng con..
chip 40 chn Led 7 on anode chung Chip At89C52
DS1307 Thach anh 12Mhz Thach anh 32Mhz
Pin 3V Pin 3V Led bo ngun v trng thi nt bm
T ha 10uF - 100uF LM7805 LM7805
Tr bng 103
III.Tin hnh lm mch.
Mch do chip designer nn cc bn yn tm mi thc mc chip s h tr.
Do phin bn trc chip qun khng thm nt Ok nn phin bn mi v sau y s c thm nt ok ri cc bn download file PDF v cm theo l chy..Ch phin bn ny c Hn gi nn ch ci loa chnh l ch ni loa ngoi( Loi loa my tnh cng c nhng ch loa thi nh)
- c k hng dn s dng trc khi dng.. xa tm tay tr em.^^ - Tin hng download file v M file m phng - Np code v Play - Nhn Set ci t gi - nhn up tng - down gim - Nhn Hn gi + nhn nt alarm - nhn set ci t - nhn up tng - down gim + nhn tip n phn giy nhn Up cho hin so 8 kich hoat t hn gi + nhn Ok la xong. - de tat hen gio nhan Alarm
#include <reg51.H> #include"LCD1602.h" //-------------------------- //5 lcd display Frequency Meter //-------------------------- //-------------------------------------------------- //Fixed function declaration void int_0(); //External Interrupt 0
IT1=0; // INT1 trigger low (compared to a falling edge trigger)
EA=1; //Open break
return; }
void IntToStr(unsigned long t, unsigned char *str) { unsigned char a[10]; char i,length; while(t/10) //The count value is converted to digital code values of pipe sections { a[i]=t%10; t=t/10; i++; } a[i]=t; length=i+1; for(i=0; i<length; i++) //Converted to ASCII code a[i]=a[i]+'0'; //for(i=0; a[i]=='0' && i<=6; i++); //for(j=8-n; j<i; j++) //Fill spaces // { *str=' '; str++; } for(i=length-1; i>=0; i--) { *str=a[i]; str++; } //Adding the number of effective *str='\0'; }
void int_1() interrupt 2 using 1 //INT1 interrupt generated from the P3.1 pin
{
T0count=0; //Clear high count
flag=1;
TH0=0; //Counter clear
TL0=0;
}
void t0(void) interrupt 1 using 0 //Counter interrupt service routine
{
T0count++;
}
void t1(void) interrupt 3 using 0 //Timer overflow interrupt program
{
TH1=0x3b; //Initial reset
TL1=0xb0;
timecount++;
if(timecount==20)
{ TR0=0; //Stop counter
x=(T0count*65536+TH0*256+TL0)*255+P1;//Take the count Clr=1; //Produce clear signal
timecount=0; //Count clear timer
Gate=!Gate; //Invert gate
}
}
11: Vit chng trnh mch m s ln nhn phm SP1 trn chn 17 (p3.7), kt qu hin th trn n s dng Led 7 on. S m bt u t 00, 01, 02,...99.
PHP: Count EQU 30H ; t tn thanh ghi 8 bit 30h l Count. SP1 BIT P3.7 ; t tn bit p3.7 l SP1. ORG 0000h ; Bt u t thanh ghi Reset 0000h START: MOV Count,#00H ; t Count v mc khi u l s 0. NEXT: MOV A,Count ; Cho chuyn ni dung trong Count vo thanh ghi a. MOV B,#10 ; t s 10 vo thanh ghi b. DIV AB ; Cho s trong a chia cho 10 (s trong b). MOV DPTR,#TABLE ; t a ch ca bng c tn l Table vo thanh ghi con tr. MOVC A,@A+DPTR ; Ly s t bng theo tr c trong a v kt qu gi trong a. MOV P1,A ; Cho xut ni dung trong a ra port 1. MOV A,B ; By gi cho chuyn ni dung trong thanh ghi b vo a. MOVC A,@A+DPTR ; Li ly s t bng theo tr c trong a v kt qu gi trong a. MOV P2,A ; Cho xut ni dung trong a ra port 2. WT: JNB SP1,WT ; Ch bung phm SP1. WAIT: JB SP1,WAIT ; Ch nhn phm SP1. LCALL DELY10MS ; Gi chng trnh tr 10ms, trnh hin tng rung phm. JB SP1,WAIT ; Kim tra bung phm INC Count ; Tng ni dung trong Count ln theo bc +1. MOV A,Count ; Cho chuyn ni dung trong Count vo thanh ghi a. CJNE A,#100,NEXT ; So snh tr trong a bng 100 cha? Nu cha th tip tc. LJMP START ; Quay li t u. DELY10MS: MOV R6,#20 ; Lm tr 10ms trnh nh hng ca rung phm. D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; Bng m s dng cho Led 7 on. END ; Dng bin dch ti dng ny. Phn tch cch vit cc cu lnh:
Trong on chng trnh trn, chng ta c dng n lnh lm php ton chia: div ab
Bn ly s c trong a chia cho b. Kt qua s chia c trong a v s d c trong b. chia a cho 10, Bn phi np vo thanh ghi b tr 10 vi cu lnh: mov b, #10.
Bn ch n trnh lm tr 10ms, y dng trnh nh hng c sai do rung phm, v mi khi Bn nhn phm, trong khong thi gian ngn phm b rung v to ra s ghi nhn sai.
Dng cu lnh so snh (cjne: Compare Jump iu kin Non-Zero) kim tra tr trong thanh ghi a. y l mt cu lnh rt thng dng. 1: Nguyn l lm vic ca ic vi iu khin AT89C51 (Bn xem hnh).
IC AT89C51 c 40 chn. Cng dng ca cc chn nh sau:
* Chn 40 ni vo ng ngun 5V, chn 20 cho ni masse.
* Chn 9 ni vo mch reset vi in tr 10K v t 10uF. Khi mch va c cp in, t np v ko chn 9 ln mc p cao to tc ng reset. Sau mt lc chn 9 tr li mc p thp. IC AT89C51 bt u hot ng t trng thi khi u.
* Chn 18, 19 mc thch anh nh tn. Nh vy tn s xung nhp s l 1Mhz (hay 1us). Ngang thch anh mc 2 t nh dng b nhit n tn (Bn xem hnh).
* Chn 31 Bn phi cho treo ln mc p cao, xc nh l mch ch lm vic vi b nh ni (V mch khng dng thm b nh ngoi). * Bn ch , ic c 4 cng, l port 0 (p0), port 1 (p1), port 2 (p2) v port 3 (p3). Mi cng c 8 chn. Mi hot ng ca ic vi iu khin u c thc hin trn cc cng ny. Ghi nhn: Bn thy ic AT89C51 ch cn mt t linh kin bn ngoi l c th chp hnh cc cu lnh c trong b nh EEP-ROM, Bn dng cc cu lnh ny xc nh trng thi in p cao thp trn cc cng v dng cc mc p cao thp ny cho vic iu khin cc dng mch in, hay cc thit b.
2: Vit chng trnh Led trn chn s 1 (p1.0) lun nhp nhy.
M: ORG 0000h ; Khi u t thanh ghi c a ch l 0000h
START: CLR P1.0 ; t chn p1.0 xung mc p thp, Led s sng.
LCALL DELAY ; Cho gi trnh lm tr (c tn nhn l delay).
SETB P1.0 ; t chn p1.0 ln mc p cao, Led s tt
LCALL DELAY ; Li cho gi trnh lm tr (c tn nhn l delay).
LJMP START ; Cho nhy v dng lnh vi tn nhn l start, cng vic s lp li.
Qua cc nhn thi gian tr ca on chng trnh delay ny l 10.002ms. Nu Bn mov vo r6=10 th thi gian tr s l 5ms. Nu Bn mov vo r6=20 th thi gian tr s l 10ms. V c thi gian tr l 200ms. Bn dng thm thanh nh r5. Mov vo r5=20. V nh vy on chng trnh tr delay 200ms nh sau: M: DELAY: MOV R5,#20 ; chuyn vo thanh ghi r5 s thp phn 20.
D1: MOV R6,#20 ; chuyn vo thanh ghi r6 s thp phn 20.
D2: MOV R7,#248 ; chuyn vo thanh ghi r7 s thp phn 248.
DJNZ R7,$ ; cho s trong r7 gim theo bc -1, ti ch v ch n khi bng 0.
DJNZ R6,D2 ; cho s trong r6 gim theo bc -1, v nhy v D2 nu cha bng 0.
DJNZ R5,D1 ; cho s trong r5 gim theo bc -1, v nhy v D1 nu cha bng 0.
RET ; quay tr li thc hin dng lnh sau lnh call. 3: Vit chng trnh dng Led trn chn 1 (p1.0) theo di kha in K1 trn chn 10 (p3.0). * K1 ng li Led sng. * K1 b ra Led tt.
M: ORG 0000H ; Khi u t thanh ghi 0000h
START: JB P3.0, LIG ; Lnh nhy. Nu chn p3.0 bit 1 th nhy n tn nhn LIG, Led tt
CLR P1.0 ; t p1.0 v bit 0, chn p1.0 mc p thp. Led s sng
SJMP START ; Nhy v tn nhn START.
LIG: SETB P1.0 ; t p1.0 v bit 1, chn p1.0 mc p cao, Led tt.
SJMP START ; Nhy v tn nhn START.
END ; Dng bin dch y.
Phn tch cch vit cc cu lnh:
y, Bn dng lnh nhy theo iu kin bit, tc lnh jb (jump bit) hay jnb (jump no bit).
JB P3.0, LIG Lnh ny c ngha l s nhy theo trng thi bit trn chn p3.0. Nu xt chn p3.0 mc p cao (nt nhn K1 h) th nhy n tn nhn LIG, v Nu xt chn p3.0 mc p thp (nt nhn K1 kn) th thc hin cu lnh k tip bn di. Bn nh, khi chn p3.0 mc p cao th Led tt v khi chn p3.0 mc p thp th Led s sng.
4: Vit chng trnh dng 4 led trn cc chn 1 (p0.0), 2 (p0.1), 3 (p0.2), 4 (p0.3) cho bit trng thi ca 4 kha in trn cc chn 5 (p0.4), 6 (p0.5), 7(p0.6), 8 (p0.7). * Khi kha in ng li Led tng ng sng. * Khi kha in nh ra, Led tng tng tt.
M: ORG 0000H ; Bt u t thanh ghi 0000h
START: MOV A,P1 ; Ly trang thi trn cng port 1 np vo thanh ghi tch ly a.
ANL A,#0F0H ; dng logic AND che 4 bit thp, gi nguyn trng thi 4 bit cao.
RR A ; cho ni dung trong thanh ghi a quay qua phi 1 bit.
RR A ; cho ni dung trong thanh ghi a quay qua phi 2 bit.
RR A ; cho ni dung trong thanh ghi a quay qua phi 3 bit.
RR A ; cho ni dung trong thanh ghi a quay qua phi 4 bit.
XOR A,#0F0H ; dng logic Ex-OR pht hin s khc bit trn 4 bit thp. ; nh vy Led ng vi v tr c bit 0 s pht sng.
MOV P1,A ; Chuyn trng thi ca thanh ghi a ra trn port 1 lm sng Led.
SJMP START ; nhy v tn nhn start tip tc lm nh trn.
END ; ngng bin dch dng lnh ny. Phn tch cch vit cc cu lnh:
a- Dng 4 phm tt m 4 Led trn port 1
Bn cho chuyn trng thi ca port 1 vo thanh ghi tch ly a, ch trng thi ca 4 bit cao. N phn nh nt nhn K1, K2, K3, K4.
b- Dng logic And vi hng 11110000b cho che 4 bit thp.
Bn ly logic AND gia thanh a v hng 0f0h (hay l 11110000b), cch lm ny l bo ton trng thi ca 4 bit cao, cn 4 bit thp u ha ra bit 0. Ngi ta quen gi l cho che 4 bit thp. c- Dng lnh quay phi 4 ln di 4 bit cao xung 4 bit thp.
Dng lnh rr a cho quay bit qua phi, nu cho quay 4 ln th 4 bit thp s ln nm vng 4 bit cao v 4 bit cao s xung nm vng 4 bit thp. Chng ta ni cho chuyn trng thi ca 4 bit cao xung vng 4 bit thp. Cng c th dng lnh swap. d- Dng logic Ex-Or pht hin cc bit khc nhau.
Ly logic D-OR pht hin cc bit ging nhau hay khc nhau: Nu cc bit ging nhau, kt qu s l bit 0. Nu cc bit khc nhau, kt qu s l bit 1. T ng ra, Bn s thy Led nm trn bit 0 s pht sng. Cc Led nm trn bit 1 s tt. 5: Vit chng trnh cho 8 Led trn port 1 ln lt nhp nhy, nhy qua tri ri nhy qua phi.
M: ORG 0000h START: MOV R2,#8 ; t tr 8 (s ln m) vo thanh ghi r2 MOV A,#0FEH ; t tr 0feh tc 11111110b v thanh ghi a. SETB C ; t bit Cary ln mc 1. LOOP: MOV P1,A ; Chuyn ni dung trong thanh ghi a vo cng port 1. LCALL DELAY ; Cho gi chng trnh lm tr RLC A ; Cho ni dung trong thanh ghi a quay qua tri c cho quay qua bit c C. DJNZ R2,LOOP ; m li tr trong thanh ghi r2. Nu cha bng 0 th lm tip lnh LOOP. MOV R2,#8 ; Np li tr 8 vo thanh ghi r2. LOOP1: MOV P1,A ; Chuyn ni dung trong thanh ghi a vo cng port 1. LCALL DELAY ; Cho gi chng trnh lm tr RRC A ; Cho ni dung trong thanh ghi a quay qua phi c cho quay qua bit c C. DJNZ R2,LOOP1 ; m li tr trong thanh ghi r2. Nu cha bng 0 th lm tip lnh LOOP1. LJMP START ; Nhy khng iu kin v tn nhn start li tip tc. DELAY: MOV R5,#20 ; Chng trnh dng lm tr (xem li phn th d 1) D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END ; Dng bin dch.
Phn tch cch vit cc cu lnh: Bi ny dng lnh quay bit qua phi v ri cho quay bit qua tri di bit 0 ln lt i qua 8 chn ca port 1, chng ta bit bit 0 s lm sng Led. Nh vy Bn s thy cc Led trn port 1 s ln lt sng v nhy qua phi ri i chiu nhy qua tri. bit 0 c th i trn 8 chn ca port 1, chng ta dng lnh quay c quay qua bit c C (rrl v rlc), d nhin trc phi nh set bit c C ln mc 1. Trnh by lnh quay rrc v rlc bng hnh minh ha (Bn xem hnh): a- Bn dng lnh quay c qua c C, vy qua 8 nhp bit 0 s vo nm trong c C, lc ny 8 bit port 1 u mc 1 v nh vy 8 Led trn port 1 u s tt. Vi lnh rlc a (rotate left Carry). Bn s thy tng Led sng ln v nhy qua bn tri.
b- Bn dng lnh quay c qua c C, vy qua 8 nhp bit 0 s vo nm trong c C, lc ny 8 bit port 1 u mc 1 v nh vy 8 Led trn port 1 u s tt. Vi lnh rrc a (rotate right Carry). Bn s thy tng Led sng ln v nhy qua bn phi.
c- Lnh quay (rotate) ch c tc dng vi thanh ghi a, do Bn mun th hin kt qu ra 8 Led trn port 1, Bn phi chuyn ni dung c trong a ra port 1. Bn dng lnh mov p1, a.
Tm li, trong bi ny Bn lm quen vi cch dng lnh quay c cho qua c C. Vi cch vit ny, Bn thy chng ta dng rt t cu lnh m vn khin cho cc Led sng nhy (nhy qua nhy li) trn port 1.
6: Vit chng trnh mch pht ra ting cnh bo. Tn hiu 1KHz v 500Hz pht ra trn chn 1 (p1.0), thi gian pht tn hiu 1KHz l 100ms v thi gian pht tn hiu 500Hz l 200ms.
Kha in trn chn 8 (p1.7) dng tt m tn hiu cnh bo.
M: FLAG BIT 00h ; nh ngh Flag dng lm bit c, hin c tr l 0. ORG 0000H START: JB P1.7,START ; Ch t nt K1 t xung mc 0. JNB FLAG,NEXT ; Nu bit c Flag l 0 th nhy n tn nhn NEXT. MOV R2,#200 ; Np s thp phn 200 vo thanh ghi r2. DV: CPL P1.0 ; Ly b chn p1.0, lnh b bit c chc nng t o. LCALL DELY500 ; Cho gi chng trnh lm tr 500us. LCALL DELY500 ; gi ln na chng trnh dely500. DJNZ R2,DV ; Cho m li v thc hin lnh b cpl p1.0 n 200 ln. CPL FLAG ; o bit trong c Flag. NEXT: MOV R2,#200 ; Np li s thp phn 200 vo thanh ghi r2. DV1: CPL P1.0 ; Ly b chn p1.0, c chc nng t o. LCALL DELY500 ; Cho gi chng trnh lm tr 500us. DJNZ R2,DV1 ; Cho m li v thc hin b cpl p1.0 n 200 ln. CPL FLAG ; Li cho o bit trong c Flag. SJMP START ; Lp li lnh t tn nhn START. DELY500: MOV R7,#250 ; Vit chng trnh con lm tr 500us. Np s 250 v thanh ghi r7. LOOP: NOP ; Lnh trng, dng n lm tng thi gian tr ln gp i. DJNZ R7,LOOP ; m li r7 lm tr. RET ; Cho quay li thc hin dng lnh sau lnh call.
END ; Dng bin dch
Phn tch cch vit cc cu lnh:
Trong bi ny, Bn thy dng khai bo bit nh ngha tn t t ca Bn, nh:
flag BIT 0 ; Ch flag do Bn t t l mt BIT, hin c gi tr l bit 0.
Bn dng lnh nhy theo bit kim tra kha in K1.
start: jb p1.7, start ; Lnh ny s ch chn p1.7 xung bit 0, nu khng n s lun dng li y.
cpl p1.0 ; Lnh ly b trn chn p1.0, ngha l n ang mc 0 th cho chuyn ln 1 v ngc li.
Phn tch cc cu lnh trn Bn thy:
Loa s h vi tn hiu 1000us (do 2 ln gi dely500) v ko di 200 ln ri chuyn qua h vi tn hiu 500us (do ch gi dely500 c 1 ln) cng thc hin 200 ln. Vi cch to ra tn hiu h 2 nhp ny, Bn s nghe ting h t Loa pht ra, tn hiu nghe nh ting ci h cnh bo..
7: Vit chng trnh dng cch ly d liu khai bo trong bng, tt m 8 Led trn port 1. * Nhy nhy qua tri 2 ln.
* Nhy nhy qua phi 2 ln.
* Ton phn nhp nhy 2 ln. (Thi gian tr 0.2 giy).
PHP: ORG 0000h [/LEFT] START: MOV DPTR,#TABLE ; Lnh cho t a ch bng vo thanh ghi con tr. LOOP: CLR A ; cho xa ni dung trong thanh ghi a, lc ny a = 00000000b MOVC A,@A+DPTR ; Cho ly ni dung trong bng theo tr trong a, v cho ct kt qu vo a. CJNE A,#01H,LOOP1 ; Nu a cha bng 01h th nhy qua tn nhn LOOP1. JMP START ; Nu trong a bng 01h th nhy v tn nhn START. LOOP1: MOV P1,A ; Chuyn ni dung trong a ra trn cng port 1. MOV R3,#20 ; Np s thp phn 20 vo thanh ghi r3. LCALL DELAY ; Gi chng trnh lm tr, tn nhn l delay. INC DPTR ; cho tng a ch bng ln +1. JMP LOOP ; Nhy v tn nhn LOOP. DELAY: MOV R4,#20 ; Vit chng trnh con dng lm tr, tn nhn l delay D1: MOV R5,#248 ; Np tr thp phn 248 vo r5. DJNZ R5,$ ; Cho gim theo bc -1, ch r5 bng 0. DJNZ R4,D1 ; Cho r4 gim theo bc -1, cha bng 0, nhy v D1. DJNZ R3,DELAY ; Cho r3 gim theo bc -1, cha bng 0, nhy v DELAY. RET ; Quay li chy cu lnh nm sau lnh call.
TABLE: DB 0FEH,0FDH,0FBH,0F7H ; Khai bo cc d liu t trong bng, tn bng l TABLE. DB 0EFH,0DFH,0BFH,07FH ; cc d liu ln lt sp trong bng. DB 0FEH,0FDH,0FBH,0F7H ; cc d liu ln lt sp trong bng. DB 0EFH,0DFH,0BFH,07FH ; cc d liu ln lt sp trong bng. DB 07FH,0BFH,0DFH,0EFH ; cc d liu ln lt sp trong bng. DB 0F7H,0FBH,0FDH,0FEH ; cc d liu ln lt sp trong bng. DB 07FH,0BFH,0DFH,0EFH ; cc d liu ln lt sp trong bng. DB 0F7H,0FBH,0FDH,0FEH ; cc d liu ln lt sp trong bng. DB 00H, 0FFH,00H, 0FFH ; cc d liu ln lt sp trong bng. DB 01H ; D liu dng soa snh nhy (Xem cu lnh trn). [LEFT]END ; Dng bin dch ti y. Phn tch cch vit cc cu lnh:
Trong bi ny, chng ta cho ly d liu lit k trong bng lm sng cc Led trn port 1. Trnh t lm nh sau:
Trc ht Bn chn cch lm sng tt cho 8 Led trn port 1 vi m 0/1. Chng ta nh bit 0 lm Led sng v bit 1 s lm Led tt. Th d: Mun Led sng nhy qua tri, chng ta s chn m iu khin nh sau:
11111110b i ra dng m h 16 s l 0FEH.
11111101b i ra dng m h 16 s l 0FDH. 11111011b i ra dng m h 16 s l 0FBH. 11110111b i ra dng m h 16 s l 0F7H. 11101111b i ra dng m h 16 s l 0EFH.
11011111b i ra dng m h 16 s l 0DFH. 10111111b i ra dng m h 16 s l 0BFH. 01111111b i ra dng m h 16 s l 07FH.
Bn c lit k ra trong bng. Sau ny s dng lnh: movc a, @a + dptr. ly cc m ny ct vo a. ngha ca cu lnh ny nh sau:
Nu khi u a=0 th n s ly m d liu u trong bng v ri ct vo thanh ghia. Bn dng lnh inc dptr d cho tr trong a tng ln +1. Vy khi dng cu lnh: movc a, @a +dptr, Bn s cho ly m d liu tip theo...
Sau mi ln ly d liu t bng ra, Bn dng cu lnh nhy theo php so snh: cjne a, #01h, loop1 xem ly n m d liu cui cng cha, v Bn t m 01H cui bng.
Ghi nhn: Dng cch vit ny, Bn rt d chn cc kiu nhp nhy cho cc Led trn port 1. Bn ch cn khai bo cc m iu khin trong bng l c. bn c th khai bo theo dng m nh phn cho d nhn thy s sng tt ca cc Led.
8: Vit chng trnh trn n s dng Led 7 on ln lt xut hin cc con s 0, 1, 2, 3... Vit chng trnh trn n s dng Led 7 on ln lt xut hin cc con s 0, 1, 2, 3...Thi gian thay i s l 0.2s.
Ch : Dng loi n s Led 7 on c Cathode chung, vy Led sng vi mc 1.
Phn tch cch vit cc cu lnh: hin cc s thp lc phn trn n s 7 on vi chn cathode (K) m cc s s nh sau: PHP: 0 hay 3 FH[/LEFT] 1 hay 06H 2 hay 5BH 3 hay 4FH 4 hay 66H 5 hay 6DH 6 hay 7DH 7 hay 07H 8 hay 7FH 9 hay 6FH A hay 77H b hay 7CH C hay 39H d hay 5EH E hay 79H F hay 71H [LEFT] Do vy to ra bng hin th cc s thp phn, chng ta s vit nh sau: TABLE DB 3FH06H5BH4FH66H6DH7DH07H7FH6FH PHP: ORG 0000h [/LEFT] START: MOV R1,#00H ; t tr khi u 0 cho thanh ghi r1 NEXT: MOV A,R1 ; Cho chuyn ni dung trong r1 vo a. MOV DPTR,#TABLE ; t a ch ca bng vo thanh ghi con tr dptr. MOVC A,@A+DPTR ; Ly cc m d liu trong bng theo tr ca a v d liu ct vo a. MOV P2,A ; Xut d liu trong a ra port 2 cho hin s. LCALL DELAY ; Cho gi chng trnh lm tr, tn nhn l delay. INC R1 ; Cho tng tr trong r1 theo kiu +1. CJNE R1,#10,NEXT ; So snh tr trong r1, xem bng 10 cha? cha, nhy v NEXT . LJMP START ; Lnh nhy khng iu kin v cu lnh c tn nhn l START. DELAY: MOV R5,#20 ; Vit chng trnh lm tr. Bn xem li cc phn th d tr n. D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; Bng m cho hin cc s t hp phn. END ; Dng bin dch. [LEFT] Ni r hn v loi n hin s dng Led 7 on (Bn xem hnh):
Khi chn trn port 2 mc p cao, th Led tng ng s pht sng. Vy chng ta c th t m trn n Led 7 on ln lt hin ra cc con s thp phn.
Hnh cho thy cc m tng ng vi cc con s thp phn hin trn bng n s dng Led 7 on.
9: Vit mch m s hin thi theo h c 2 vi 4 Led trn cc chn 1 (p1.0), 2 (p1.1), 3 (p1.2), 4 (p1.3) Vit mch m s hin thi theo h c 2 vi 4 Led trn cc chn 1 (p1.0), 2 (p1.1), 3 (p1.2), 4 (p1.3). Mi ln nhn kha in SP1 trn chn 17 (p3.7) th s tng ln +1.
PHP: ORG 0000h [/LEFT] START: MOV R1,#00H ; Cho khi u vi tr 0 trong thanh ghi r1. MOV A,R1 ; chuyn ni dung trong r1 vo a. CPL A ; Ly b 8 bit trong thanh ghi a. MOV P1,A ; Xut ni dung trong a ra cng port 1. REL: JNB P3.7,REL ; Ch bun phm nhn chn p3.7. LCALL DELAY10MS ; Gi chng trnh con lm tr 10ms. JNB P3.7,REL ; Trnh nh hng ca rung phm. INC R1 ; Cho tng tr trong thanh ghi r1 MOV A,R1 ; Cho chuyn ni dung trong r1 vo a. CPL A ; Ly b 8 bit trong thanh ghi a MOV P1,A ; Xut ni dung trong a ra cng port 1. JNB P3.7,$ ; Ch bung phm SP1 SJMP REL ; Nhy khng iu kin v dng lnh tn nhn l REL DELAY10MS: MOV R6,#20 ; Vit chng trnh lm tr 10ms L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET
END ; Dng bin dch ti dng ny. [LEFT] Phn tch cch vit cc cu lnh:
Ni dung bi vit l c nhn mt ln phm SP1, mch m s h c 2 s nhy ln 1 s (Bn xem hnh).
y c 2 cu hi, ti hi Bn:
(1) Vn rung phm l g?
(2) Ti sao phi ly b a ri mi cho xut trn cng port1?
Vn rung phm l do phn tip xc xu, khi Bn nhn xung, phm s b rung, n ngt m nhiu ln v to ra kt qu sai. Do vy Bn phi vit on chng trnh ch 10ms ri mi xc lp trng hi ca phm, iu ny s tng n nh khi dng loi phm c kh. Cch vit nh sau:
REL: JNB P3.7,REL
; Khi bn nhn xung, nu phm tt, n s bit 0 v s trng thi ch bung phm. Nu c rung phm, n s nhy xung cu lnh di l cho gi chng trnh tr 10ms.
LCALL DELAY10MS ; Gi chng trnh con lm tr 10ms.
; Sau chng trnh tr n s quay li li kim tra phm vi cu lnh: JNB P3.7,REL
Nu n bit 0 th quay li REL v li ch bung phm. Ch khi n Bit 1 th mi cho tng tr trong r1.
..... .
JNB P3.7,$
; Cu lnh ny l nhy tai ch khi Bn cha b phm nhn SP1 ra.
Tr li cu hi th 2: Ti sao phi ly b a (cpl a) ri mi cho xut ra trn cng port1.
y chng ta kch Led bng mc p thp, do khi tng 1, n s l:
00000000b --> 00000001b Vy phi ly b ca n s l 11111110b iu ny s ch c Led p1.0 sng m thi n ng vi 1 ln nhn phm.
Nu 2 ln nhn phm kt qu l:
00000010b --> ly b l 11111101b. Vy Led p1.1 s sng. Bn c l lun tip tc s thy mch ny dng m h c 2, kt qu cho hin th trn cc Led ca port 1.
v nu Bn thy thch, Bn c th gn 8 Led trn port 1 v s thy hin tng trng s. Thanh ghi 8 bit ch m c 256 nhp s trang s, quay v 0 v bt u m tip...
10: Vit chng trnh , mi ln nhn kha in SP1 trn chn 17 (p3.7) th Led D1 trn chn 1 (p1.0), nhp nhy Vit chng trnh , mi ln nhn kha in SP1 trn chn 17 (p3.7) th Led D1 trn chn 1 (p1.0), nhp nhy. Khi nhn SP1 ln na n Led D2 trn chn 2 nhp nhy, nhn SP1 ln na n Led D3 trn chn 3 nhp nhy v nhn SP1 ln na th n Led D4 trn chn 4 nhp nhy, v qui trnh tip tc lp li nh trn.
PHP: ID EQU 30H ; Ly thanh nh c a ch 30h nh ngha l thanh ID.[/LEFT] K1 BIT P3.7 ; Chn p3.7 nh ngha vi tn l K1 L1 BIT P1.0 ; Chn p1.0 nh ngha vi tn l L1. L2 BIT P1.1 ; Chn p1.1 nh ngha vi tn l L2. L3 BIT P1.2 ; Chn p1.2 nh ngha vi tn l L3. L4 BIT P1.3 ; Chn p1.3 nh ngha vi tn l L4. ORG 0000h MOV ID,#00H ; Tr khi u ca ID l 0. START: JB K1,REL ; Cha nhn phm th nhy n tn nhn REL. LCALL DELAY10MS ; Gi chng trnh lm tr 10ms (trnh rung phm). JB K1,REL ; Cha nhn phm th nhy n tn nhn REL. INC ID ; Tng tr trong ID. MOV A,ID ; Cho chuyn ni dung trong ID v thanh ghi a. CJNE A,#04,REL ; Cho so snh a vi #04 pht hin s ln nhn K1 MOV ID,#00H ; Tr tr trong ID v tr o. REL: JNB K1,$ ; Ch bung phm K1 MOV A,ID ; Cho chuyn ni dung trong ID v thanh ghi a. CJNE A,#00H,IS0 ; Cho so snh a vi #00 pht hin s ln nhn K1 CPL L1 ; Ly b L1 tt/m Led D1 LCALL DELAY ; Gi chng trnh lm tr vi tn nhn l delay. SJMP START ; Nhy khng iu kin v tn nhn START IS0: CJNE A,#01H,IS1 ; Cho so snh a vi #01 pht hin s ln nhn K1 CPL L2 ; Ly b L2 tt/m Led D2 LCALL DELAY ; Gi chng trnh lm tr vi tn nhn l delay. SJMP START ; Nhy khng iu kin v tn nhn START IS1: CJNE A,#02H,IS2 ; Cho so snh a vi #02 pht hin s ln nhn K1 CPL L3 ; Ly b L3 tt/m Led D3 LCALL DELAY ; Gi chng trnh lm tr vi tn nhn l delay. SJMP START ; Nhy khng iu kin v tn nhn START IS2: CJNE A,#03H,IS3 ; Cho so snh a vi #03 pht hin s ln nhn K1 CPL L4 ; Ly b L4 tt/m Led D4 LCALL DELAY ; Gi chng trnh lm tr vi tn nhn l delay. SJMP START ; Nhy khng iu kin v tn nhn START IS3: LJMP START ; Nhy khng iu kin v tn nhn START
DELAY10MS: MOV R6,#20 ; Chng trnh lm tr LOOP1: MOV R7,#248 DJNZ R7,$ DJNZ R6,LOOP1 RET DELAY: MOV R5,#20 LOOP2: LCALL DELAY10MS DJNZ R5,LOOP2 RET END ; Dng bin dch ti y. [LEFT] Phn tch cch vit cc cu lnh:
Bn hy ch n lnh so snh c iu kin, dng pht hin cc m trng nhau hay khc nhau v t a ra hng s l vn . Th d:
CJNE A,#00H,IS0
; Cho so snh a vi s #00, nu khc th nhy n tn nhn IS0, nu ng th xung thi hnh dng lnh bn di.
CPL L1 ; Ly b L1 tt/m Led D1.
LCALL DELAY ; Gi chng trnh lm tr vi tn nhn l delay.