合泰单片机生成pwm

更新时间:2023-10-02 06:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include \

#define RS _pc0 #define RW _pc1 #define E _pd6

float ad_shidu; //湿度变量 float ad_wendu; //温度变量 char Sunshine; //光照变量 char timer0_cnt; long int m;

unsigned int temp=0;

void ad_init(void) //A/D转换初始化 { //8分频;内部1.25V电压除能;内部参考电源电压来源于VDD _adcr1 = 0x03; //启动A/D转换模块(ADCR0寄存器第5位) _adoff = 0; }

void ad_pa1(void) //pa1端口ad配置 { //定义PA1为A/D输入,即AN1 _pas0 = 0x30; //选择模拟通道AN1;ADC数据高字节是ADRH的第7位,低字节是ADRL的第4位 _adcr0 = 0x01; }

void ad_pa3(void) //pa3端口ad配置 { //定义PA1为A/D输入,即AN1 _pas1 = 0x30; //选择模拟通道AN1;ADC数据高字节是ADRH的第7位,低字节是ADRL的第4位 _adcr0 = 0x03; }

//开始进行ad转换 void ad_switch(void)

{ //ADCR0寄存器第七位 _start=1; //start位0->1->0,表示启动A/D转换 _start=0; }

void pwn_1(void) { _pcc5=0; _pcpu5=1; // _pc5 = 1; _pcs2 |= (2 << 4); // _tm1c1=0b10101000; // _tm1c0=0b00001111; _tm0c0 |= (0 << 4); _tm0c0 |= (1 << 0); _tm0al = 0x3f; _tm0ah = 0x00; _tm0c1 |= (2 << 6); _tm0c1 |= (2 << 4); _tm0c1 |= (1 << 3); _tm0c1 &=~(1 << 1); _tm0c0 &=~(1 << 7); _tm0c0 |= (1 << 3); /*_tm0c0 |= (1 << 3); }

void pwn_2(void) { _pcc6=0; _pcpu6=1; // _pc5 = 1; _pcs3 |= (1 << 0); // _tm1c1=0b10101000; // _tm1c0=0b00001111; _tm0c0 |= (0 << 4); _tm0c0 |= (1 << 0); _tm0al = 0x3f; _tm0ah = 0x00; _tm0c1 |= (2 << 6); _tm0c1 |= (2 << 4); _tm0c1 |= (1 << 3); //输出 //上拉 //PC5 功能选择为TM1输出 //fsys/4 //CCRP:001b //PWM模式 //PWM 输出 //高有效 //CCRP-周期 CCRA-占空比 //运行定时器 //计数器On //计数器On*/ //输出 //上拉 //PC5 功能选择为TM1输出 //fsys/4 //CCRP:001b //PWM模式 //PWM 输出 //高有效

_tm0c1 &=~(1 << 1); //CCRP-周期 CCRA-占空比 _tm0c0 &=~(1 << 7); //运行定时器 _tm0c0 |= (1 << 3); //计数器On /*_tm0c0 |= (1 << 3); //计数器On*/ }

//定时器

void time_init(void) { //保持对应的I/O口的原来功能 _pds2 = 0; _phs0 = 0;

_tm0c0 = 0x00; //简易型TM(查找TMnC0寄存器),4分频

/*_tm0c1 = 0xc1; //简易型TM(TMnC1寄存器)计数器模式;比较器A匹配*/

/*计数值的上限是3FFH,这里取计数初值为356H,即每隔 (3FFH-356H)=169x1/(fsys/4)的时间触发一次中断*/

/* _tm0al = 0x56; //简易型TM(TM0 CCRA低字节寄存器)先写低字节

_tm0ah = 0x03; //简易型TM(TM0 CCRA高字节寄存器)先读高字节,再读低字节*/

_tm0al = 0x3f; _tm0ah = 0x00; _t0on = 1; //启动定时器0(TM0C0寄存器的bit3位)*/ _t0pe = 1; //定时器0比较器A匹配中断控制位(MFI0寄存器bit1位) _mf0e = 1; //允许多功能中断0,多功能中断包括TM中断(INTC1寄存器bit1位) }

void __attribute((interrupt(0x14))) time_int(void) //每1s中断一次,灯亮/灭一次 { _emi = 0; //

// MFI0寄存器bit5位,中断标志请求 // _t0af = 0; //

// timer0_cnt--; // if(!timer0_cnt){

// _pe = ~_pe; // timer0_cnt = 2000; // } m++; while(m==200000) _tm0c0=0x10; _t0pf=0; _emi = 1; }

void main() { //设置看门狗除能(使能应为:0b01010011) _wdtc = 0b10101011; m=0; time_init(); _emi = 1;//开总中断 pwn_1(); while(1) { } }

本文来源:https://www.bwwdw.com/article/jm5d.html

Top