合泰单片机生成pwm

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "HT66FU70A.h"

#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); //PC5 功能选择为TM1输出// _tm1c1=0b10101000;

// _tm1c0=0b00001111;

_tm0c0 |= (0 << 4); //fsys/4

_tm0c0 |= (1 << 0); //CCRP:001b

_tm0al = 0x3f;

_tm0ah = 0x00;

_tm0c1 |= (2 << 6); //PWM模式

_tm0c1 |= (2 << 4); //PWM 输出

_tm0c1 |= (1 << 3); //高有效

_tm0c1 &=~(1 << 1); //CCRP-周期CCRA-占空比_tm0c0 &=~(1 << 7); //运行定时器

_tm0c0 |= (1 << 3); //计数器On

/*_tm0c0 |= (1 << 3); //计数器On*/

}

void pwn_2(void)

{

_pcc6=0; //输出

_pcpu6=1; //上拉

// _pc5 = 1;

_pcs3 |= (1 << 0); //PC5 功能选择为TM1输出// _tm1c1=0b10101000;

// _tm1c0=0b00001111;

_tm0c0 |= (0 << 4); //fsys/4

_tm0c0 |= (1 << 0); //CCRP:001b

_tm0al = 0x3f;

_tm0ah = 0x00;

_tm0c1 |= (2 << 6); //PWM模式

_tm0c1 |= (2 << 4); //PWM 输出

_tm0c1 |= (1 << 3); //高有效

_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;

相关文档
最新文档