89C51PWM控制,包含源程序,仿真圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
3.png (60.63 KB, 下載次數: 93)
下載附件
2017-12-24 12:04 上傳
3..png (87.48 KB, 下載次數: 76)
下載附件
2017-12-24 12:04 上傳
0.png (13.02 KB, 下載次數: 71)
下載附件
2017-12-24 14:28 上傳
單片機源程序如下:
- PWMH DATA 30H ;高電平脈沖的個數
- PWM DATA 31H ;PWM周期
- COUNTER DATA 32H
- TEMP DATA 33H
- ORG 0000H
- AJMP MAIN
- ORG 000BH
- AJMP INTT0
- ORG 0100H
- MAIN:
- MOV SP,#60H ;給堆棧指針賦初值
- MOV PWMH,#02H ;
- MOV COUNTER,#01H
- MOV PWM,#15H
- MOV TMOD,#02H ;定時器0在模式2下工作
- MOV TL0,#38H ;定時器每200us產生一次溢出
- MOV TH0,#38H ;自動重裝的值
- SETB ET0 ;使能定時器0中斷
- SETB EA ;使能總中斷
- SETB TR0 ;開始計時
- KSCAN:
- JNB P1.1,K1CHECK ;掃描KEY1,
- JNB P1.2,K2CHECK ;掃描KEY2,如果按下KEY2,跳轉到KEY2處理程序
- SJMP KSCAN
- K1CHECK:
- JB P1.1,K1HANDLE ;去抖動,如果按下KEY1,跳轉到KEY1處理程序
- SJMP K1CHECK
- K1HANDLE:
- MOV A,PWMH
- CJNE A,PWM,K1H0 ;判斷是否到達上邊界
- SJMP KSCAN ;是,則不進行任何操作
- K1H0:
- MOV A,PWMH
- INC A
- CJNE A,PWM,K1H1 ;如果在加1后到達最大值
- CLR TR0 ;定時器停止
- SETB P1.0 ;P1.0為高電平
- SJMP K1H2
- K1H1:
- CJNE A,#02H,K1H2 ;如果加1后到達下邊界
- SETB TR0 ;重開定時器
- K1H2:
- INC PWMH ;增加占空比
- SJMP KSCAN
- K2CHECK:
- JB P1.2,K2HANDLE ;去抖動,如果按下KEY2,跳轉到KEY2處理程序
- SJMP K2CHECK
- K2HANDLE:
- MOV A,PWMH
- CJNE A,#01H,K2H0 ;判斷是否到達下邊界
- SJMP KSCAN ;是,則不進行任何操作
- K2H0:
- MOV A,PWMH
- MOV TEMP,PWM
- DEC A
- CJNE A,#01H,K2H1 ;如果在減1后到達下邊界
- CLR TR0 ;定時器停止
- CLR P1.0 ;P1.0為低電平
- SJMP K2H2
- K2H1:
- DEC TEMP
- CJNE A,TEMP,K2H2 ;如果到達上邊界
- SETB TR0 ;啟動定時器
- K2H2:
- DEC PWMH ;降低占空比
- SJMP KSCAN
- INTT0:
- PUSH PSW ;現場保護
- PUSH ACC
- INC COUNTER ;計數值加1
- MOV A,COUNTER
- CJNE A,PWMH,INTT01 ;如果等于高電平脈沖數
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
89C51PWM.zip
(46.45 KB, 下載次數: 60)
2017-12-24 12:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|