📄 spwm.asm
字号:
;本程序通过测试.
;采用PWM技术形成50HZ波形.在
;每半周波形上建立128个采样点,
;每个采样点产生一个脉冲.每
;个脉冲宽度可变范围分为128级.
;数值变化范围:00H-0fEH.
;采用STC12C2052AD芯片
;模块0输出时标(P3.7)
;模块1输出PWM(P3.5)
;P0.0、P0.1控制脉冲输出流向
;---------------------------------------------------------
;定义寄存器
ccon equ 0d8h
cmod equ 0d9h
ccapm0 equ 0dah
ccapm1 equ 0dbh
cl equ 0e9h
ccap0l equ 0eah
ccap1l equ 0ebh
ch equ 0f9h
pca_pwm0 equ 0f2h
pca_pwm1 equ 0f3h
ccap0h equ 0fah
ccap1h equ 0fbh
ccf0 equ 0d8h
ccf1 equ 0d9h
ea equ 0afh
cr equ 0deh
cf equ 0dfh
CPU 8031
ORG 0H
AJMP maim
;------------------------------------------------
org 30h
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ORG 202H
;初始化
;调用延时
;设堆栈指针
maim:
ACALL delay
mov sp,#0e0h
;------------------------------------------------
;PCA在空闲模式下停止PCA计数器工作
;PCA时钟模式为fosc/2
;开放PCA计数器溢出标志
;禁止PCA计数器工作,清除中断标志、计数器益出标志
;清零计数器
mov cmod,#88h
mov ccon,#00h
mov cl,#00h
mov ch,#00h
;-----------------------------------------------
;设置模块计数长度为8位
mov pca_pwm0,#00h
mov pca_pwm1,#00h
;-----------------------------------------------
setb p3.4
setb 00h;标志位为1
mov p1,#01h
mov ccapm0,#42h
mov ccapm1,#42h
setb ie.6;开PCA中断(IE.6)
setb ea;开总中断
setb cr;允许计数
;-----------------------------------------------
;查表,输出PWM正弦脉冲
sin1:
mov r5,#80h
sin2:
jnb p3.4,$;判溢出标志
setb p3.3
mov a,r5
mov dptr,#ctab
movc a,@a+dptr
mov ccap0h,#0f0h
mov ccap1h,a
ACALL delay
clr p3.3
djnz r5,sin2
cpl 00h
jb 00h,sin3
mov p1,#02h
ajmp sin1
sin3:
mov p1,#01h
ajmp sin1
;--------------------------------------------------------
ctab:DB 00H,0FFH,0F9H,0F3H,0EDH,0E5H,0DFH,0D9H,0D3H
DB 0CDH,0C7H,0C1H,0BBH,0B5H,0AFH,0A9H,0A3H
DB 9DH,97H,91H,8BH,87H,81H,7BH,75H
DB 71H,6BH,67H,61H,5FH,57H,53H,4FH
DB 4BH,45H,41H,3DH,39H,35H,31H,2DH
DB 2BH,27H,23H,21H,1DH,1BH,17H,15H
DB 13H,11H,0FH,0DH,0BH,09H,07H,05H
DB 05H,03H,01H,01H,01H,01H,01H,01H
DB 01H,01H,01H,01H,01H,01H,03H,05H
DB 05H,07H,09H,0BH,0DH,0FH,11H,13H
DB 15H,17H,1BH,1DH,21H,23H,27H,2BH
DB 2DH,31H,35H,39H,3DH,41H,45H,4BH
DB 4FH,53H,57H,5FH,61H,67H,6BH,71H
DB 75H,7BH,81H,87H,8BH,91H,97H,9DH
DB 0A3H,0A9H,0AFH,0B5H,0BBH,0C1H,0C7H,0CDH
DB 0D3H,0D9H,0DFH,0E5H,0EDH,0F3H,0F9H,0FFH
;延时
delay:
mov r1,#10h
delay_loop:
nop
nop
nop
djnz r1,delay_loop
ret
;--------------------------------------------------------
;陷阱
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
ljmp maim
end
jb p3.4,$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -