TL2 DATA 0CCH RCAP2L DATA 0CAH RCAP2H DATA 0CBH T2MOD DATA 0C9H T2CON DATA 0C8H TR2 BIT 0CAH TF2 BIT 0CFH ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV T2CON,#00H;T2工作在时钟输出方式 MOV T2MOD,#02H;T2输出时钟使能 MOV TL2,#0A0H;输出50Hz频率方波 MOV TH2,#15H MOV RCAP2L,#0A0H MOV RCAP2H,#15H
SETB TR2;T2开始工作 SJMP $
END
C51程序:
#include
T2CON=0x00; T2MOD=0x02;
TL2=0xA0;//输出50Hz频率方波 TH2=0x15; RCAP2L=0xA0; RCAP2H=0x15; TR2=1; while(1); }
7-11 简述STC12C5A60S2单片机的PCA模块的功能。
PCA每个模块都有自己的工作方式寄存器,通过对工作方式寄存器的设置,可以使各模块工作在定时方式(相当于定时、计数器)、捕获方式(相对应模块计数器所计数据进行捕获的方式,用于测量外部信号产生的时间间隔)、方波输出方式、输出信号脉宽调制(PWM)方式。
7-12假设系统时钟频率为12MHz,利用PCA模块的功能,分别用汇编语言和C51编程实现在P1.3引脚上间断重复输出频率为450Hz的
21
方波,持续和停止时间均为4s。
分析:将PCA模块的工作方式寄存器CCAPM0寄存器写为4DH,即PCA0设为时钟输出方式,从而可以在P1.3引脚自动翻转,输出方波,并允许PCA中断。要求方波频率为450hz,即周期为1/450,定时时间应设定为1/900s,选择计数器时钟来源为系统时钟频率的12分频,即工作方式寄存器CMOD设为00H,需要计数(1/900)/(12/12000000)=10000/9≈1111=0457H个时钟脉冲,可将CL、CH初始值设为零,CCAP0H设为04H,CCAP0L设为57H,在每次PCA中断里:将计数值加到比较匹配寄存器里CCAP0H、CCAP0L=CCAP0H、CCAP0L+0457H
启动PCA计数持续4秒(CR=1),停止(CR=0)持续4秒;
4秒钟定时:定时器T1,工作在方式1,计数时钟fosc/12,定时50毫秒,用R7计数T1中断80次产生4秒钟定时。
初值为N:由(65536-N)*1=50000得N=15536=3cb0H (1) 汇编程序:
CCON EQU 0D8H;PCA控制寄存器 CMOD EQU 0D9H;PCA模式寄存器 CL EQU 0E9H;PCA定时器的低8位 CH EQU 0F9H;PCA定时器的高8位
CCAPM0 EQU 0DAH; PCA模块0的模式寄存器
CCAP0L EQU 0EAH;PCA模块0的捕获寄存器的低8位 CCAP0H EQU 0FAH;PCA模块0的捕获寄存器的高8位 AUXR EQU 8EH
CR BIT CCON.6;PCA定时控制位 CF BIT CCON.7;PCA溢出标志位 ORG 0000H LJMP MAIN ORG 001BH LJMP T1_INT ORG 003BH LJMP PCA_INT ORG 0100H MAIN: CLR A MOV CCON,A;//(P197) MOV CL,A; MOV CH,A; MOV SP,#0BFH;初始化堆栈指针 MOV TMOD,#10H;T1工作在方式1 MOV TL1,#0B0H;给T1写入初值 MOV TH