?? chk9033.c
字號:
//本程序是用來初始化9033的,發(fā)一條讀地址的命令給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; //發(fā)送標志
/*Rxd0flag用來判斷有沒有接收中斷產(chǎn)生,如果沒有接收,
說明9033對發(fā)給它的數(shù)據(jù)沒有響應,表明9033沒有打開。*/
uchar Rxd0flag=0; //接收標志
uchar equflag=0; //地址相等標志
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
Init();
_EINT();
//do //這里應該用do-while循環(huán)還是while的死循環(huán)
//{
if(Txd0flag==1)
Txd();
else
while(1);
//}
while((Addr_9033<0x100)&&(equflag==0)&&(Rxdflag==1));
/*如果是因為沒有接收中斷產(chǎn)生或者地址沒有找到而跳出的程序;表示沒有打開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為發(fā)送
for(i=0;i<7;i++)
{
TXBUF0=Txd0data[i];
while((UTCTL0&0x01)==0);
}
Addr_9033+=1;
Txd0flag=0;
P1OUT&=~0x10; //設置輸出0時控制485為接收,發(fā)送結(jié)束就馬上變成接收
}
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接收發(fā)送控制引腳
UCTL0 &=~SWRST; //USART允許
UCTL0 |=0x10; //8數(shù)據(jù)位
UBR00=0x03;
UBR10=0x00; //9600bps,9033的默認值是9600
UMCTL0=0x4A; //位調(diào)整
UTCTL0=0x10; //ACK
P3DIR=0x10; //P3.4 TXD;P3.5 RXD
P3SEL=0x30; //P3.4,P3.5為USRT0用
IE1 |=URXIE0; //接收中斷允許
ME1 |=0xC0; //發(fā)送允許
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -