假设单片机的晶体震荡器的频率是11.0592MHz,利用定时器1采用方式1定时20ms,写出初值
发布网友
发布时间:2022-04-23 11:21
我来回答
共2个回答
热心网友
时间:2023-10-12 06:04
给你一个参考程序,该例题在《单片机原理与应用-基于汇编、C51及混合编程》一书的第181-183页有汇编及C51的详细解析。
【例7-3】设STC12C5A60S2单片机的系统时钟频率为12MHz,编程实现从P1.1引脚输出周期为1s的方波。
分析:根据题目要求知,P1.1引脚的输出应每隔500ms取反一次,即定时时间为500ms。用一个定时/计数器无法实现,可用定时/计数器T1进行10ms的定时,然后用寄存器R7对10ms定时中断次数计数50次来实现。定时/计数器T1定时10ms,选择对系统时钟的12分频模式,T1x12位为0,Tc=10ms,fosc=12MHz,可知计数次数N=10000,选择方式1。初值X=216-10000=55536=D8F0H,则TH1=D8H,TL1=F0H。
(1)汇编程序:
ORG 0000H
LJMP MAIN
ORG001BH ;T1的中断向量入口地址
LJMPT1_INT
ORG0100H
MAIN:MOVSP,#0BFH ;初始化堆栈指针
MOV TMOD,#10H ;T1工作在方式1
MOV TL1,#0F0H ;给T1写入初值
MOV TH1,#0D8H
MOVR7,#50 ;利用寄存器R7计数50次
SETB EA ;开放总中断
SETB ET1 ;T1溢出中断允许
SETB TR1 ;启动T1开始工作
SJMP $
T1_INT:MOVTL1,#0F0H ;重新赋初值
MOV TH1,#0D8H
DJNZ R7,NEXT ;R7减1不为0,说明中断次数未到50次,跳转到NEXT
;处返回
CPL P1.1 ;已定时中断50次, P1.1引脚取反
MOV R7,#50 ;重新赋给R7值50
NEXT:RETI
END
热心网友
时间:2023-10-12 06:05
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar tt;
sbit d1=P1^7;
void init();
void main()
{
init();
while(1)
{
if(tt==10)
{
d1=0;
}
if(tt==20)
{
tt=0;
d1=1;
}
}
}
void init()
{
tt=0;
TMOD=0x10;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EA=1;
ET1=1;
TR1=1;
}
void timer0() interrupt 3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
tt++;
}追问在单片机硬件设计时,地址选择信号是(ES片选),PSEN信号的处理方式为()请问能帮忙解答吗?