SETB EA SETB ET0 SETB TR0 SJMP $ END
C语言程序:
#include <reg51.h> //包含特殊功能寄存器库 sbit P1_0=P1^0; void main() {
TMOD=0x01;
TH0=0xFC;TL0=0x18; EA=1;ET0=1; TR0=1; while(1); }
void time0_int(void) interrupt 1 //中断服务程序 {
TH0=0xFC;TL0=0x18; P1_0=!P1_0; }
19. 8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。
解:从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为00010000B(10H),初值X:
X=65536-10000=55536=1101100011110000B 则TH1=11011000B=D8H,TL1=11110000B=F0H。 定时/计数器T1采用中断处理方式。 汇编程序:
ORG 0000H LJMP MAIN
ORG 001BH LJMP INTT1
ORG 0100H
MAIN: MOV TMOD,#10H
MOV TH1,#0D8H MOV TL1,#0F0H MOV R2,#00H SETB EA SETB ET1 SETB TR1 SJMP $
INTT1: MOV TH1,#0D8H
MOV TL1,#0F0H INC R2
CJNE R2,#64H,NEXT