应该保持1微秒,所以只能对原信号进行展宽,常用的方法是连接一个单稳态电路,其时常数不在1-1.5微秒之间即可。
10、MCS-51的中断服务程序能否放在65KB程序存储器的任意区域?如何实现?
MCS-51的中断服务程序可以放在65KB程序存储器的任意区域,只要在对应的中断矢量入口填写相应的跳转指令即可。例如外部中断IE1的中断服务程序的起始地址为3400H,则在0013H单元内填写 LCALL 3400H。
第六章
1、8051单片机内设几个可编程的定时/计数器?它们有几种工作方式?如何选择和设定?作为定时器或计数器,它们的波特率各为多少?
8051单片机内设有两个钧为16位的可编程的定时/计数器,共有4种工作方式,即:方式0—13位定时/计数器、方式1—16位定时/计数器、方式2—自动重载初值得8位定时/计数器和方式3—T0为两个独立的8位定时/计数器,在方式3下,T1停止工作。
8051定时/计数器的工作方式由控制寄存器TMOD的M0、M1两位设置,因为TMOD的地址为89H,所以M0、M1不能位寻址,只能通过字节操作的方式对M0、M1的值进行设定。
当用定时/计数器作为波特率发生器时,根据串口的工作模式,有三种情形: 方式0的波特率为主振频率fosc的十二分之一;
2SMOD?fosc,其中,SMOD为PCON寄方式2的波特率依照下式确定:Baud rate ?64存器中的波特率倍增位。
方式1和方式3的波特率计算依照下列关系求的TH1即可:
fosc2SMOD Baud rate ??3212?(256?TH1)
2、定时/计数器作定时器用时,其定时时间有哪些因素有关?做计数器用时,对外部计数频率有何限制?
8051的定时/计数器工作在定时器状态时,输入的时钟脉冲是由晶体振荡器的输出经12分频得到的,故其频率为晶振频率的十二分之一。所以,定时输出是晶振频率处以12再除以计数值。
8051的定时/计数器工作在计数器状态时,需要两个机器周期才能识别一个从“1”到“0”的跳变,故最高计数频率不大于晶振频率的二十四分之一。 3、8051单片机的晶振频率为6MHz,若只使用T0产生500微秒定时,可以选择哪几种定时方式?分别写出定时器的方式控制字和计数器初值。 选择方式0或方式1,计数器初值为8192-250,或65536-250。. 此处给一个C语言写的程序段,定时信号由P1.0输出: ORG 0000H LJMP MAIN ORG 000BH LJMP TO_INTERRUPT MAIN:SETB EA
MOV TH0, (65536-250)/256 MOV TL0, (65536-250)%6 SETB TR0 SETB ET0 SJMP $ T0_INTERRUPT: CLR TR0
MOV TH0, (65536-125)/256 MOV TL0, (65536-125)%6 P1^0 = ~P1^0 SETB TR0 RETI
4、某8051系统晶振频率为6MHz,先欲从P1.7引脚输出一个连续5Hz的方波信号,请编写程序。
5Hz的方波周期为200毫秒,高低电平各持续100毫秒,若晶振频率为6MHz,
则机器周期为2微秒,故其计数值应为: N=100ms/2μs=50000
采用方式1进行计数,则 X=M-N=65536-50000=15536H=0C350H 程序编写如下:
MOV TMOD, #05H; 设置T0工作方式,定时,方式1 MOV TH0,#0C3H; MOV TL0,#050H; SETB TR0;
LOOP: JBC
启动T0 写入计数器初值
TF0,$; 查询定时器溢出标志
MOV TH0,#0C3H; MOV TL0,#050H CPL P1.7 SJMP LOOP; END
也可以用C语言编写:
用定时/计数器T0从P1.7输出周期为5s的方波,晶振频率为6MHz。 #include
#define uchar unsigned char #define uint unsigned int sbit D1=P1^0; uchar a;
void init() //初始化 {
TMOD=0x01; //选择定数计数器0的工作方式为16位定时器
TH0=(65535-50000)%6; //赋初值,定时100ms TL0=(65535-50000)/256;
EA=1; //中断控制允许 ET0=1;
a=0;
TR0=1; //启动定时器0 }
void time0() interrupt 1 //定时器0中断函数 {
TH0=(65535-50000)%6; //赋初值,定时100ms TL0=(65535-50000)/256; a++;
TR0=1; }
void main() {
init(); while(1) {
while(a==25)//半个周期(2500ms)时,P1.7上的电平跳变一次。
{
a=0;
P1.7=~P1.7; //取反 } } }
5、某单片机系统,时钟频率为12MHz,定时/计数器T0用于20ms定时,T1用于100次计数,两者要求重复工作,问: (1)、外部计数脉冲从何引脚输入? (2)、编写达到上述要求的程序。
(3)、利用定时/计数器T0、T1编写延时2S的程序。