定时1s亮灭10次
ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0 ORG 0030H MAIN: MOV R0,#10 ;循环10次,使定时100ms*10产生1s MOV R1,#20 ;循环20次,亮10次,灭10次 MOV TMOD,#01H ;工作方式1 MOV TH0,#3CH ;计数器初值 MOV TL0,#0B0H SETB ET0 ;开启定时/计数器(T0)中断允许位 SETB EA ;开启总中断 SETB TR0 ;开启定时/计数器(T0)运行控制位,为1时启动定时计数 SETB P1.0 ;先灭1s SJMP $ TIMER0: MOV TH0,#3CH ;重装初值 MOV TL0,#0B0H DJNZ R0,EXIT CPL P1.0 ;亮灭取反 MOV R0,#10 DJNZ R1,EXIT CLR EA ;关中断 EXIT: RETI END方式2计数,方式1定时,循环
ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER1 ORG 0030H MAIN: MOV TMOD,#06H ;工作方式2计数 MOV TH0,#156 ;计数100个脉冲 MOV TL0,#156 SETB ET0 ;定时器中断初始化 SETB EA SETB TR0 ;TR0为1开始计数,此时标志位F0为0 SETB F0 ;标志位置1 SJMP $ ;程序原地踏步,定时和计数不停地来回切换 TIMER1: ;中断用于切换工作方式和装填初值 JNB F0,TRANS ;标志位为0则跳 MOV TMOD,#01H ;方式1 MOV TH0,#0FEH MOV TL0,#0CH SJMP EXIT TRANS: MOV TMOD,#06H MOV TH0,#156 MOV TL0,#156 EXIT: CPL F0 ;标志位取反 RETI串行口发送
采用串口工作方式1将8051单片机P1口采集的8位数据实时串行传输。无需奇偶校验,采用中断方式。波特率为9600波特(晶振频率为11.0592MHz)。
ORG 0000H LJMP MAIN ORG 0023H LJMP SEND ORG 0030H MAIN: MOV SCON,#40H MOV PCON,#00H MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH SETB TR1 SETB EA SETB ES MOV P1,#0FFH ;P1输入 MOV A,P1 MOV SBUF,A SJMP $ SEND: CLR TI MOV P1,#0FFH MOV A,P1 MOV SBUF,A RETI串行口接收
采用串口工作方式1接收8位串行数据,由P1口输出。无需奇偶校验,采用中断方式。波特率为9600波特(晶振频率为11.0592MHz)。
ORG 0000H LJMP MAIN ORG 0023H LJMP RECEIVE ORG 0030H MAIN: MOV SCON,#50H MOV PCON,#00H MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH SETB TR1 SETB EA SETB ES SJMP $ RECEIVE: CLR RI MOV A,SBUF MOV P1,A RETI