合泰单片机生成pwm
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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){