个时钟脉冲,可将CL、CH初始值设为零,CCAP0H设为04H,CCAP0L设为57H,在每次PCA中断里:将计数值加到比较匹配寄存器里CCAP0H+=4,CCAP0L+=57H
4秒启动一次PCA计数(CR=1),4秒停止(CR=0);
4秒定时器由T1产生,工作在方式1定时50毫秒,计数时钟fosc/12 初值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,#B0H;给T1写入初值 MOV TH1,#3CH;
ANL AUXR,#101111111H;//T1X12=0
MOV CCAPM0,#4DH;// 允许中断,输出方波
MOV CCAP0L,#57H; MOV CCAP0H,#04H;
MOV CMOD,#0H;//FOSC/12时钟计数 MOV R7,#80;利用寄存器R7计数80次 SETB EA; SETB ET1; SETB TR1; SETB CR SJMP $
T1_INT: MOV TL1,#B0H;给T1写入初值
MOV TH1,#3CH; DJNZ R7,NEXT; MOV C,CR CPL C MOV CR,C MOV R7,#80;
NEXT:RETI PCA_INT: PUSH PSW PUSH ACC CLR CCF0 MOV A,CCAP0L ADD A,#57H MOV CCAP0L,A MOV A,CCAP0H ADDC A,#04H
MOV CCAP0H,A POP ACC POP PSW RETI END C51程序:
#include
TMOD=0x10; TL1=0xB0; TH1=0x3C; CMOD=0x00; AUXR&=0xBF; CCAPM0=0x4D; CCAP0L=0x57; CCAP0H=0x04; EA=1; ET1=1; TR1=1; CR=1; while(1); }
void T1_INT() interrupt 3 {
TH1=0xB0; TH1=0x3C; i++; if(i==80)
{ CR=!CR; i=0; } }
void pca_INT() interrupt 7 {
CCAP0L+=0x57; CCAP0H+=0x04; }
7-13假设系统的时钟频率为11.0592MHz,利用PCA模块的PWM功能分别用汇编语言和C51编程实现输出400Hz且占空比为60%的矩形波。
分析:仿照例题7-8,系统的时钟频率为11.0592MHz,根据公式PWM的频率
PCA的时钟源频率,计算出PCA的时钟源频率为102400Hz,用T0的溢出作为PCA
256时钟源,11059200?102400=108,即对系统时钟源fosc进行108级分频,设T0工作在1T模
256-CCAP0L式,T0的初值为256-108=148=80H,由占空比==0.6,可计算出
256=
CCAP0L=66H,CMOD寄存器应赋值为04H,CCAPM0寄存器初值为42H。
(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
CLR A MOV CCON,A
MOV CL,A;计数器初值复位 MOV CH,A
MOV TMOD ,#02H MOV TL0,#80H ;给T0赋初值 MOV TH0,#80H
MOV CMOD,#04H ;利用T0的溢出作PCA时钟源 MOV AUXR,#80H ;T0工作在1T模式
MOV CCAPM0,#42H ;允许P1.3引脚作脉宽调节输出 MOV CCAP0L,#66H ;用于输出占空比为60%的波形 MOV CCAP0H,#66H
SETB TR0 ;T0计数器启动工作 SETB CR ;PCA计数器启动工作 SJMP $ (2)C51程序:
#include
CCON=0x00; //PCA控制寄存器清0 CL=0x00; //16位PCA计数器清0 CH=0x00;
TMOD=0x02;//T0工作在方式2 TL0=0x80;//给T0赋初值 TH0=0x80;
CMOD=0x04; // 利用T0的溢出作PCA时钟源
AUXR=0x80; // T0工作在1T模式
CCAPM0=0x42;//允许比较且作为PWM脉宽调节输出
CCAP0L=0x66;//控制模块0的输出占空比为40% CCAP0H=0x66; TR0=1;//T0开始工作