當前位置:編程學習大全網 - 編程語言 - 松翰單片機SN8P2711A產生pwm程序,急

松翰單片機SN8P2711A產生pwm程序,急

給個51單片機的給妳參考下

*---------------

文件名稱: PWM.C

功能 :單片機脈沖方式產生PWM信號

----------------*/

#include <reg52.h> // 引用標準庫的頭文件

#include <absacc.h>

#include <stdio.h>

#define uchar unsigned char

#define uint unsigned int

#define COUNT0 XBYTE [0X0000] // 8254計數器0寄存器地址

#define COUNT1 XBYTE [0X0200] // 8254計數器1寄存器地址

#define COUNT2 XBYTE [0X0400] // 8254計數器2寄存器地址

#define COMWORD XBYTE [0X0600] // 8254控制寄存器地址

/********************************

函數名稱: SIGNAL(SIG_OUTPUT_COMPARE1A)

功能 :定時器0中斷子程序

入口參數:無

返回值 :無

********************************/

void time0_int () interrupt 1 using 1

{

TR0=0; // 關閉T0

TH0=-(20000/256);

TL0=-(20000%256); //重置20ms計數值

/*--------------用8254計數器發送第壹路的PWM信號-----------*/

COMWORD=0x30; //1MHz時鐘作為計數時鐘,計數1000次後實現1ms高電平

COUNT0=0xE0;

COUNT1=0x03;

/*--------------用8254發送第二路的PWM信號----------------*/

COMWORD=0x70; //1MHz時鐘作為計數時鐘,計數2000次後實現2ms高電平

COUNT0=0xD0;

COUNT1=0x07;

/*-------------用8254發送第三路的PWM信號----------------*/

COMWORD=0xB0;//1MHz時鐘作為計數時鐘,計數3000次後實現32ms高電平

COUNT0=0xB0;

COUNT1=0x0B;

TR0=1; //啟動T0

}

//主函數

void main ()

{

EA=1; // 開CPU總中斷

ET0=1; // 開T0定時器中斷

TMOD=0x01; // 開定時器中斷

TH0=-(20000/256); //20ms定時器計數初值

TL0=-(20000%256);

/*--------------向8254控制寄存器選擇計數器0,並對其賦值0-----------------*/

COMWORD=0x30;

COUNT0=0; //賦低位字節

COUNT0=0; //賦高位字節

/*---------------向8254控制寄存器選擇計數器1,並對其賦值0------------------*/

COMWORD=0x70;

COUNT0=0; //賦低位字節

COUNT0=0; //賦高位字節

/*---------------向8254控制寄存器選擇計數器2,並對其賦值0-----------------*/

COMWORD=0xB0;

COUNT0=0; //賦低位字節

COUNT0=0; //賦高位字節

TR0=1; //啟動定時器0

While (1); //無限次循環

}

  • 上一篇:linux內核多大內存linux內核多大
  • 下一篇:花更少的錢,過精致生活
  • copyright 2024編程學習大全網