• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

用stc12c5410ad单片机产生spwm遇到的问题

首先我不懂怎么计算 我是学生初学者 用示波器观察的时候就是看到占空比不断变化  那个表我是在网上随便找一个的现在就是要了解原理  恳求各位大侠教教哦 我还是学生 哦

/*PCA外部中断*/
iph        equ 0b7h
epca_lvd   equ ie.6
cl    equ 0e9h   ;pca低8位
ch    equ 0f9h   ;pca高8位
ccon  equ 0d8h ;pca控制寄存器
/*各模块中断标志         */
ccf0  bit ccon.0
ccf1  bit ccon.1
ccf2  bit ccon.2
ccf3  bit ccon.3
ccf4  bit ccon.4
ccf5  bit ccon.5

cr    bit ccon.6;允许pca计数必须软件清0
cf    bit ccon.7;pca计数溢出

cmod  equ 0d9h ;pca工作寄存器
/*pca模块的捕捉高8位 */
ccap0h equ 0fah
ccap1h equ 0fbh
ccap2h equ 0fch
ccap3h equ 0fdh
ccap4h equ 0feh
ccap5h equ 0ffh
/*pca模块的捕捉低8位 */
ccap0L equ 0Eah
ccap1L equ 0Ebh
ccap2L equ 0Ech
ccap3L equ 0Edh
ccap4L equ 0Eeh
ccap5L equ 0Efh
/*pca模块pwm寄存器*/
pca_pwm0 equ 0f2h
pca_pwm1 equ 0f3h
pca_pwm2 equ 0f4h
pca_pwm3 equ 0f5h
pca_pwm4 equ 0f6h
pca_pwm5 equ 0f7h
/*pca工作模式寄存器*/
ccapm0 equ 0dah
ccapm1 equ 0dbh
ccapm2 equ 0dch
ccapm3 equ 0ddh
ccapm4 equ 0deh
ccapm5 equ 0dfh
/*定义mcu管脚*/
led_mcu_start  equ p1.7
led_5ms_flash  equ p1.6
led_1s_flash   equ p1.5
/*给计数器初值18.432mjz*/
channe0_5ms_h  equ 1eh
channe0_5ms_l  equ 00h; 初值0.05s中断一次
counter        equ 30h ;
org 0000h
ajmp main
org 0033h
ljmp pca_interrupt
org 0100h
main: clr p1.7
   mov sp,#7fh
   mov counter,#0
   lcall pca_init
   ajmp $
/*初始化pca定时器*/
pca_init:mov cmod,#10000000b;模式寄存器分配
         mov ccon,#00h;控制寄存器分配CF CR CCF3~CCF0
   mov cl ,#00h  ;清pca计数器
      mov ch ,#00h
   mov ccap1L,#channe0_5ms_l
   mov ccap1h,#channe0_5ms_h ;给初值
   mov ccapm1,#49h;设置pca0为16位软定时器

   mov pca_pwm0,#00h
   mov a,#00h
      mov ccap0h,a
      mov ccap0L,a
      mov ccapm0,#42h  ;p3.7
   setb epca_lvd ;开pca中断标志位
   setb ea
   setb cr
   ret
pca_interrupt:
        push acc
  push psw

  /*5ms中断一次*/
  mov a,#channe0_5ms_L
  add a,ccap1L
  mov ccap1l,a

  mov a,#channe0_5ms_h
  add a,ccap1h
  mov ccap1h,a  ;增加计数给ccap0h/L
  clr ccf1   ;清标志位
  CPL P1.6
  mov cl ,#00h  ;清pca计数器
     mov ch ,#00h
  inc counter
  mov a,counter
  cjne a,#188,siyuan
  mov counter,#0
siyuan: MOV DPTR, #table    ;查表
        MOVC A ,@A+DPTR     ;数组送给a
        mov ccap0h,a
      mov ccap0L,a
      mov ccapm0,#42h  ;p3.7   /*200*5ms=1000ms=1s*/
pca_exti:
         pop psw
   pop acc
   reti
table:DB 80H,83H,86H,89H,8DH,90H,93H,96H
DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H
DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H
DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H
DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H
DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH
DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H
DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H
DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH
DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H
DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H
DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H
DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H
DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H
DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH
DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H
DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H
      end   

 


 

全部回复(5)
正序查看
倒序查看
2011-08-24 15:11
单片机内部没有集成PWM模块么?如果通过定时器的方式只能是不断更新定时器周期寄存器值,表格实际上是一个按正弦规律变化的一个数组,可以通过MATLAB生成。
0
回复
2011-08-27 22:08
@TRACY_2011_HIT
单片机内部没有集成PWM模块么?如果通过定时器的方式只能是不断更新定时器周期寄存器值,表格实际上是一个按正弦规律变化的一个数组,可以通过MATLAB生成。

他用的就是单片机里的pca可编程计数器阵列。。只不过是汇编。我只会看c帮不了你。你直接看技术文档得了。。

0
回复
2011-08-29 22:15

这款芯片不可以吧,最好用专用的。不如借鉴我这个。我这是PIC 的和瑞萨的。还有好多种变频器生产技术转让。qq583934409

 

0
回复
一信111
LV.1
5
2011-10-09 22:48

看看STC12系列的技术文档

0
回复
slslsl651
LV.4
6
2011-10-10 09:32
我测试stc12c单片机时,发现它不能输出0占空比,就是设置0占空比的值  255  ,它仍然要先输出一个很窄的脉冲,然后才降到零,不知道你发现了没有
0
回复