📄 chk9033.c
字号:
//本程序是用来初始化9033的,发一条读地址的命令给9033,看它返回的地址是多少
//2003.6.11
#include "msp430x14x.h"
void Init(void);
void Txd(void);
#define uint unsigned int
#define uchar unsigned char
uint Txd0data[7]={0x4c,0x57,0x0,0x20,0x00,0x0,0x0d};
uint Rxd0data[10];
uint Addr_9033=0;
uchar Txd0flag=1; //发送标志
/*Rxd0flag用来判断有没有接收中断产生,如果没有接收,
说明9033对发给它的数据没有响应,表明9033没有打开。*/
uchar Rxd0flag=0; //接收标志
uchar equflag=0; //地址相等标志
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
Init();
_EINT();
//do //这里应该用do-while循环还是while的死循环
//{
if(Txd0flag==1)
Txd();
else
while(1);
//}
while((Addr_9033<0x100)&&(equflag==0)&&(Rxdflag==1));
/*如果是因为没有接收中断产生或者地址没有找到而跳出的程序;表示没有打开9033*/
if((Addr_9033>=0x100)||(Rxd0flag==0))
//9033没有打开
if(equflag==1)
{//9033返回了正确的地址值,初始化成功
return(Addr_9033);}
}
void Txd(void)
{
uchar i,j=0;
Rxd0flag=0;
if(Addr_9033<0x100)
{
Txd0data[2]=Addr_9033;
for(i=2;i<5;i++)
j+=Txd0data[i];
Txd0data[5]=j;
}
P1OUT|=0x10; //设置输出1时控制485为发送
for(i=0;i<7;i++)
{
TXBUF0=Txd0data[i];
while((UTCTL0&0x01)==0);
}
Addr_9033+=1;
Txd0flag=0;
P1OUT&=~0x10; //设置输出0时控制485为接收,发送结束就马上变成接收
}
interrupt[UART0RX_VECTOR] void UART0RX(void)
{
uchar k=0;
Rxd0data[0]=RXBUF0;
if(Rxd0data[k]!==0)
{
k++;
Rxd0data[k]=RXBUF0;
}
if((Txd0data[0]==Rxd0data[0])&&(Txd0data[1]==Rxd0data[1])&&
(Txd0data[2]==Rxd0data[2])&&(Txd0data[3]==Rxd0data[3])&&
(Txd0data[4]==Rxd0data[4])&&(Txd0data[5]==Rxd0data[5])&&
(Txd0data[6]==Rxd0data[6]))
equflag=1;
Rxd0flag=1;
Txd0flag=1;
}
void Init(void)
{
P1DIR|=0x10; //485接收发送控制引脚
UCTL0 &=~SWRST; //USART允许
UCTL0 |=0x10; //8数据位
UBR00=0x03;
UBR10=0x00; //9600bps,9033的默认值是9600
UMCTL0=0x4A; //位调整
UTCTL0=0x10; //ACK
P3DIR=0x10; //P3.4 TXD;P3.5 RXD
P3SEL=0x30; //P3.4,P3.5为USRT0用
IE1 |=URXIE0; //接收中断允许
ME1 |=0xC0; //发送允许
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -