*******************************************************/
#include
#include
#define BT_TRD PTB_PTB2
#define BT_RED PTB_PTB3
unsigned char ii;
unsigned char inch;
//////////////////////////////////////////////////
// 定时计数器1初始化
void Timer1_Init(void)
{
T1SC_TSTOP=1; //停止计数器1
T1SC_TRST=1; //复位计数器1,清除计数器的计数值和设定的分频系数
//以上两位同时置1使计数器停在$0000上
T1SC=0x45; //启动计数器,使能溢出中断,32分频总线频率,即每16uS计数1次,晶振8M,总线频率为2M
T1MODH=0x00;
T1MODL=0x07; //波特率为9600,104us传输一位,即每7个计数发生溢出一次
}
////////////////////////////////////////////////
//系统集成模块初始化
void SIM_INIT(void)
{
CONFIG1=0x39; //5V
CONFIG2=0x09;
}
/////////////////////////////////////////////////
void main()
{
EnableInterrupts; /* enable interrupts */
SIM_INIT();
DDRB_DDRB2=1; //PTB2为输出口,为模拟串口发送数据端
DDRB_DDRB3=0; //PTB3为输入口,为模拟串口接受数据端
ii=0;
PTB_PTB2=1; //空闲状态置位高电平
inch=0x55; //发送数据0x55
Timer1_Init();
for(;;);
}
//////////////////////////////////////////////////////////
//中断服务程序
//////////////////////////////////////////////////////////
interrupt void T1_OverFlow_ISR(void)
{
T1SC_TOIE=0; //溢出中断禁止
T1SC_TOF=0; //清处溢出标志位
if(ii==0)
{
BT_TRD=0; //发送起始位0
ii++;
}
else if((ii>0)&&(ii<8))
{
if(inch&0x01) //先发送lsb,判断1还是0
{
BT_TRD=1; //发1
}
else
{
BT_TRD=0; //发0
}
inch=(inch>>1); //发送次低位
ii++;
}
else if(ii==8)
{
BT_TRD=1; //发停止位
ii++;
}
else
{
ii=0; //循环发送0x55
}
T1SC_TOIE=1; //溢出中断使能
}
以上是我的程序,程序采用循环发送0x55,每次计数满发送一位,现在的问题是程序不产生中断,是我中断设置的问题还是计数器的问题呢,斑主给分析一下吧,谢谢!!
|