|
前幾天為串口2的接收發(fā)愁,總是以為是軟件問(wèn)題,后來(lái)和建華,一頓示波器,一頓萬(wàn)用表,捉住幾個(gè)波形,測(cè)量電壓,最后才說(shuō)是電平被USB供電的串口芯片拉低,只有3,5V的高電平,PL3201這塊貨識(shí)別不出來(lái),所以唯一的辦法就是抬升加中間轉(zhuǎn)換芯片,,再次聲明PL3201是他媽的大垃圾!大家千萬(wàn)不要用了,垃圾的要死!麻痹的下載個(gè)程序卡的要死,10次能同步一次,還有啊,不能JTAG,想看個(gè)變量都要打印出來(lái),調(diào)試程序要了命了,麻煩啊!全是眼淚啊!嗚嗚!
// 控制看門狗喂狗時(shí)間長(zhǎng)度
CKCON=0xfF;
// 8位/16位運(yùn)算模式選擇位設(shè)置
ALU_MOD=0; // 設(shè)置成8位運(yùn)算模式
//載波通訊配置
//************ 3201的載波寄存器設(shè)置 **********//
set_PLC_3105 ( ); //上電為3105模式
SSC_ADR=0xFF;
SSC_DAT=0xFF;
SSC_ADR=0x02;
SSC_DAT=0x1F;
SSC_ADR=0xFF;
SSC_DAT=0x00;
//************ 3201的載波寄存器設(shè)置 **********//
// ( C8H ) 為邊沿觸發(fā)方式(IT2=1)
//串口通訊配置
//TMOD1 = 0x10 ; // 設(shè) T/C1 為1分頻模式,ZZZ
TMOD = 0x21 ; // 設(shè) T/C1 為定時(shí)方式2 設(shè)置為8位自裝載計(jì)數(shù)器 T/C0 為定時(shí)方式 1
SCON=0x50; // 工作方式1
PCON=0x80; // 波特率加倍
TH1=BPS2400;
TL1=BPS2400; // 加倍設(shè)定波特率 9.6MHz ( 按1分頻2400計(jì)算)
TR1=1;
IE=0x82; // 啟動(dòng)定時(shí)器1
TH0=0x63;
TL0=0xcc; // 定時(shí) 50 ms 一個(gè)定時(shí)中斷
TR0 = 1;
TMOD1=0x12; //time2方式2
SCON1=0x50; //
TH2=0xfb;
TL2=TH2;
TR2 =1;
ES=1;
ES1=1;
EA=1;
sbit USART0_RX_A=P1^2;
sbit USART1_TX_A=P0^3;
static uint8_t write=0;
static uint8_t read=0;
uint8_t xdata USART_BUF[50];//usart緩存
static uint8_t write1=0;
static uint8_t read1=0;
uint8_t xdata USART_BUF1[50];//usart緩存
void check_usart()
{
if(write!=read)
{
USART1_TX_A=~USART1_TX_A;//發(fā)送指示
SendOneByte1(USART_BUF[read]);
read++;
if(read==49)read=0;
}
}
void check_usart1()
{
if(write1!=read1)
{
USART1_TX_A=~USART1_TX_A;//發(fā)送指示
SendOneByte1(USART_BUF1[read1]);
read1++;
if(read1==49)read1=0;
}
}
void Show_version(void)
{
printf_usart(" Version:0.0.0 \n");
printf_usart(" 小ARM菜菜 \n");
printf_usart("QQ:925295580 \n");
printf_usart("王建華的路燈終端板 \n");
printf_usart("Over! \n");
}
void SendOneByte1(unsigned char c)
{
USART1_TX_A=~USART1_TX_A;
SBUF1 = c;
while(!ETI);
ETI=0;
}
void printf_usart(char *ptr)
{
char a;
while (*ptr) {
a=(char)*ptr;
SendOneByte1(a);
ptr++;
}
}
void send_usart1_data(char *ptr,unsigned char len)
{
char a,i;
for(i=0;i<len;i++)
{
a=(char)*ptr;
SendOneByte1(a);
ptr++;
}
}
void UARTInterrupt(void) interrupt 4
{
char a;
if(RI)
{
RI = 0;
USART0_RX_A=~USART0_RX_A; //串口1接收
/*USART_BUF[write]=SBUF;
write++;
if(write==49)write=0; */
a=SBUF;
SendOneByte1(a);
}
else
TI = 0;
}
void UARTI1nterrupt(void) interrupt 6
{
char b;
if(ERI)
{
ERI=0;
USART0_RX_A=~USART0_RX_A; //串口1接收
/*USART_BUF1[write1]=SBUF1;
write1++;
if(write1==49)write1=0;
*/
b= SBUF1;
SendOneByte1(b);
}
else
{
ETI=0 ;
//send_usart1_data("456",3);
}
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
|
|