📄 carrier.c
字号:
#include<reg51.h>
#include"inc/define.h"
#include"inc/config.h"
#include"inc/carrier.h"
static u8 tmr_sel;
u8 SerialData[SerialLen];
u8 SerialPos = 0;
u8 freq_h,freq_l;
/******************************************************
*说明:对用于产生串行数据流的定时器进行初始化
*函数名称:carrier_init
*参数:
*tmr:指定用于产生PWM的定时器 0:定时器0 其他:定时器1
*baud:脉冲频率
*返回值:
*其他:
*********************************************************/
void carrier_init(u8 tmr,u16 baud)
{
freq_h = (u32)(65536 - (F_CPU/baud))/256;
freq_l = (u32)(65536 - (F_CPU/baud))%256;
if(1==tmr || 0==tmr)
tmr_sel = tmr;
else
tmr_sel = 1;
if(1 == tmr_sel)
{
TMOD &= 0x0F;
TMOD |= 0x10; /* 定时器1方式1:16位手动装载模式 */
TH1 = freq_h;
TL1 = freq_l;
EA = 1; /* 开启全局中断 */
ET1 = 1; /* 开启定时器1中断 */
TR1 = 1; /* 启动定时器1 */
}
else /* 0 == tmr_sel */
{
TMOD &= 0xF0;
TMOD |= 0x01; /* 定时器0方式1:16位手动装载模式 */
TH0 = freq_h;
TL0 = freq_l;
EA = 1; /* 开启全局中断 */
ET0 = 1; /* 开启定时器0中断 */
TR0 = 1; /* 启动定时器0 */
}
}
/*****************************************************
*说明:使用定时器0产生串行数据载波时起作用
*函数名称:Timer0_ISR
*参数:
*返回值:
*其他:
*******************************************************/
void Timer0_ISR(void) interrupt 1
{
TH0 = freq_h;
TL0 = freq_l;
if(SerialPos < (SerialLen * 8))
SerialPos++;
else
SerialPos = 0;
CarrierPort = ((SerialData[SerialPos/8] & (1 << (SerialPos%8))) << CarrierPIN );
}
/*****************************************************
*说明:使用定时器1产生PWM时起作用
*函数名称:Timer1_ISR
*参数:
*返回值:
*其他:
*******************************************************
void Timer1_ISR(void) interrupt 3
{
TH1 = freq_h;
TL1 = freq_l;
if(SerialPos < (SerialLen * 8))
SerialPos++;
else
SerialPos = 0;
CarrierPort = ((SerialData[SerialPos/8] & (1 << (SerialPos%8))) << CarrierPIN );
}
*******************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -