導航:首頁 > 操作系統 > 單片機控制pwm程序

單片機控制pwm程序

發布時間:2024-08-10 17:28:00

『壹』 利用51單片機定時器產生PWM波的c語言程序,要求如下

#include<reg51.h>
#define uchar unsigned char
uchar pwm=50,cnt;
sbit pluse=P1^0;
sbit keyu=P1^4;
sbit keyd=P1^5;
void t0isr() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
cnt++;
if(pwm>0)
{
if(cnt>100)cnt=0;
if(cnt<=pwm)pluse=1;
else pluse=0;
}
else pluse=0;
}
main()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyu==0)
{
while(keyu==0);
pwm++;
if(pwm>100)pwm=100;
}
if(keyd==0)
{
while(keyd==0);
if(pwm>0)pwm--;
}
}
}

『貳』 STC單片機PWM編程

看看這個,單片機用的是ADUC848,AD轉換輸出正弦波,和PWM原理類似。

2、源程序清單

DACCONEQU0xfD;定義模數轉換控制器

DACHEQU0xfc;定義模數轉換數據寄存器高8位

DACLEQU0xfb;定義模數轉換數據寄存器低8位

ORG0000H

LJMPMAIN

ORG0200H

MAIN:MOVDACCON,#0fH;DACoperation

CLRA;

MOVDACH,A;模數轉換高八位清零

PRG3:MOVR0,#09H;正弦波

MOVR4,#40H

LP11:MOVA,R0

MOVCA,@A+PC

MOVDACL,A;2

ACALLDELAY;2

INCR0;1

DJNZR4,LP11;2

SJMPPRG3;2

DATA0:

DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH

DB0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H

DB0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH

DB80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H

DB0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H

DB1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

RET

DELAY:MOVR6,#10H

MOVR7,#0A1H

DELAYLOOP:;延時程序

DJNZR6,DELAYLOOP

DJNZR7,DELAYLOOP

RET

四、實驗板插針配置:

無需插針配置,注意DAC是從CONDACOUT1端子輸出,可用示波器觀察DAC輸出波形。若產生失真情況,請檢查開發板DA輸出端LM358運算放大器的放大倍數,適當更改所查函數表的范圍。

五、思考題

1、改變程序,使能添加輸出鋸齒波;

2、改變程序,使輸出添加三角波;

3、改變程序,使輸出添加方波;

4、改變程序,並製作一個簡單的函數發生器

『叄』 用單片機定時器模擬PWM10KHZ的方波控制直流電機的程序編寫

#include<reg51.h>
#defineucharunsignedchar
ucharpwm=50,num;
sbitpluse=P1^0;
voidt0isr()interrupt1
{
num++;
num%=10;
if(num<pwm/10)pluse=1;
elsepluse=0;
}
main()
{
TMOD=0x02;
TH0=246;
TL0=246;
TR0=1;
ET0=1;
EA=1;
while(1);
}

『肆』 基於單片機的直流電機PWM調速控制(要單片機的代碼)快啊

; PWM 控制 LED 燈漸亮漸滅程序 *
; 利用定時器控制產生占空比可變的 PWM 波 *
; 按K1,PWM值增加,則占空比減小,LED 燈漸暗。 *
; 按K2,PWM值減小,則占空比增加,LED 燈漸亮。 *
;當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警 *
;資源:p0口,8路指示燈。p1.4,p1.5亮度控制按鍵(埠按鍵)p3.7小喇叭報警 *

;----
PWM EQU 7FH ;PWM賦初始值
OUT EQU P0 ;8個LED燈的介面
INCKEY EQU P1.4 ;K1,PWM值增加鍵。
DECKEY EQU P1.5 ;K2,PWM值減小鍵。
BEEP EQU P3.7
;----
ORG 0000H
SJMP START
ORG 000BH
SJMP INTT0
ORG 001BH
SJMP INTT1
ORG 0030H
;----
;主程序
;定時器0工作在模式1,定時器1工作在模式2。
;----
START:
MOV SP,#30H
MOV TMOD,#21H
MOV TH1,PWM ;脈寬調節
MOV TL1,#00H
MOV TH0,#0FCH ;1ms延時常數
MOV TL0,#066H ;頻率調節
SETB EA
SETB ET0
SETB ET1
SETB TR0
LOOP: MOV A,PWM ;
JB INCKEY,LOOP1 ;增加鍵是否按下?
CALL DELAY ;延時去抖動
JB INCKEY,LOOP1
CJNE A,#0FFH,PWMINC ;是否到最大值?
CALL BEEP_BL ;是,蜂鳴器報警。
SJMP LOOP
PWMINC:
INC PWM ;調節脈寬(脈寬減小)
SJMP LOOP

LOOP1: JB DECKEY,LOOP2 ;減小鍵是否按下?
CALL DELAY ;延時去抖動
JB DECKEY,LOOP2
CJNE A,#02H,PWMDEC ;是否到最小值?
CALL BEEP_BL ;是,蜂鳴器報警。
SJMP LOOP
PWMDEC:
DEC PWM ;調節脈寬(脈寬增加)
LOOP2: SJMP LOOP
;----
;T0中斷服務子程序 (頻率)
;控制定時器1中斷
;----
INTT0:
CLR TR1
MOV TH0,#0FCH ;1ms延時常數
MOV TL0,#066H ;頻率調節
MOV TH1,PWM
SETB TR1
MOV OUT,#00H ;啟動輸出
RETI
;----
;T1中斷服務子程序 (脈寬)
;控制PWM脈沖寬度
;----
INTT1:
CLR TR1 ;脈寬調節結束
MOV OUT,#0FFH ;結束輸出
RETI
;----
;10ms延時子程序
;----
DELAY:
MOV R6,#50
DELAY1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY1
RET
;----
;蜂鳴器響一聲子程序
;---
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL BEEP
DJNZ R6,BL1
MOV R5,#25
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延時R5×10MS
MOV R6,#50
BL4: MOV R7,#100
BL5: DJNZ R7,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
;---
END

閱讀全文

與單片機控制pwm程序相關的資料

熱點內容
採用fifo頁面置換演算法是 瀏覽:192
如何上網代理伺服器 瀏覽:591
Hro系統源碼 瀏覽:845
寶庫源碼 瀏覽:340
路飛和熊排解壓力 瀏覽:623
php定時更新 瀏覽:355
數控5軸編程培訓一般多久 瀏覽:558
cadpdf圖層 瀏覽:248
用登號器出現伺服器未響應是什麼 瀏覽:903
java演算法是什麼 瀏覽:634
程序員cc發展方向 瀏覽:987
智慧黑板在哪裡下載app 瀏覽:311
男生穿衣搭配app哪個好 瀏覽:596
光大信用卡年費在app哪裡可以看 瀏覽:211
如何在找機平台下載app 瀏覽:395
西安php工作好找嗎 瀏覽:927
outlook命令 瀏覽:229
程序員那麼可愛主角介紹 瀏覽:934
銀行卡簡訊消息如何加密 瀏覽:246
文件夾怎麼不重名 瀏覽:406