ผมใช้ borad ตามนี้ครับ
http://www.ett.co.th/product/06A01.htmlอธิบายโปรแกรม
** คือ จาก void RecieveLamp(void) ผมต้องการให้ได้
if(RCREG=='S')
{
SB6=0;
SB7=1;
}
if(RCREG=='R')
{
SB6=1;
SB7=0;
}
แต่ปรากฏว่า SB6 SB7 เป็น 1 ทั้งอันเลย แล้วพอ SB3
ดูให้หน่อยว่ามันผิดตรงไหน
#include"pic.h"
static bit SA1 @((unsigned)&PORTA*8+1);
static bit SA2 @((unsigned)&PORTA*8+2);
static bit SA3 @((unsigned)&PORTA*8+3);
static bit SA4 @((unsigned)&PORTA*8+4);
static bit SA5 @((unsigned)&PORTA*8+5);
static bit SB1 @((unsigned)&PORTB*8+1);
static bit SB2 @((unsigned)&PORTB*8+2);
static bit SB3 @((unsigned)&PORTB*8+3);
static bit SB4 @((unsigned)&PORTB*8+4);
static bit SB5 @((unsigned)&PORTB*8+5);
static bit SB6 @((unsigned)&PORTB*8+6);
static bit SB7 @((unsigned)&PORTB*8+7);
static bit SC1 @((unsigned)&PORTC*8+1);
static bit SC2 @((unsigned)&PORTC*8+2);
static bit SC3 @((unsigned)&PORTC*8+3);
static bit SC4 @((unsigned)&PORTC*8+4);
static bit SC5 @((unsigned)&PORTC*8+5);
static bit SD1 @((unsigned)&PORTD*8+1);
static bit SD2 @((unsigned)&PORTD*8+2);
static bit SD3 @((unsigned)&PORTD*8+3);
static bit SD4 @((unsigned)&PORTD*8+4);
static bit SD5 @((unsigned)&PORTD*8+5);
static bit SD6 @((unsigned)&PORTD*8+6);
static bit SD7 @((unsigned)&PORTD*8+7);
void delay(int time)
{
while(time--);
}
void InitInput(void)
{
TRISA=0xFF; // Port A all input
TRISB=0x3F; // bit ที่ 6,7เป็น output
TRISC=0xFF; // Port A all input
TRISD=0xFF; // Port D all input
ADCON1=0x06;
}
//
void InitRS232(void) // speed 9600 data 8 bit 1 stop bit
{
TRISC6=0;
TRISC7=1;
SPBRG=25;
SYNC=0; // Asynchronous mode
BRGH=1; // high speed
SPEN=1;
CREN=1;
TXIE=0;
TXEN=1;
RCIE=0;
RCIF=0;
}
void SendChar(unsigned char DataIn)
{
while(TXIF==0);
TXREG=DataIn;
}
void SendA(unsigned char Num,char En)
{
SendChar(':');
SendChar('A');
SendChar(0x30+Num);
if(En)
SendChar('S');
else
SendChar('R');
delay(1000);
}
void SendB(unsigned char Num,char En)
{
SendChar(':');
SendChar('B');
SendChar(0x30+Num);
if(En)
SendChar('S');
else
SendChar('R');
delay(1000);
}
void SendC(unsigned char Num,char En)
{
SendChar(':');
SendChar('C');
SendChar(0x30+Num);
if(En)
SendChar('S');
else
SendChar('R');
delay(1000);
}
void SendD(unsigned char Num,char En)
{
SendChar(':');
SendChar('D');
SendChar(0x30+Num);
if(En)
SendChar('S');
else
SendChar('R');
delay(1000);
}
void RecieveLamp(void)
{
int timeout;
SendChar(':');
SendChar('D');
SendChar('L');
timeout=1000;
while(RCIF==0)
{
timeout--;
if(timeout==0)
{
break;
}
}
if(timeout!=0)
{
if(RCREG=='S')
{
SB6=0;
SB7=1;
}
if(RCREG=='R')
{
SB6=1;
SB7=0;
}
}
}
void SendAllStatus(void)
{
SendA(1,(char)SA1);
SendA(2,(char)SA2);
SendA(3,(char)SA3);
SendA(4,(char)SA4);
SendA(5,(char)SA5);
SendD(6,(char)SD6);
SendD(7,(char)SD7);
SendB(1,(char)SB1);
SendB(2,(char)SB2);
SendB(3,(char)SB3);
SendB(4,(char)SB4);
SendB(5,(char)SB5);
SendD(6,(char)SD6);
SendD(7,(char)SD7);
SendC(1,(char)SC1);
SendC(2,(char)SC2);
SendC(3,(char)SC3);
SendC(4,(char)SC4);
SendC(5,(char)SC5);
SendD(6,(char)SD6);
SendD(7,(char)SD7);
SendD(1,(char)SD1);
SendD(2,(char)SD2);
SendD(3,(char)SD3);
SendD(4,(char)SD4);
SendD(5,(char)SD5);
SendD(6,(char)SD6);
SendD(7,(char)SD7);
}
//覧覧覧覧覧覧覧覧覧覧覧覧覧//
// *****Main Program*****
//覧覧覧覧覧覧覧覧覧覧覧覧覧//
void main(void)
{
InitInput();
InitRS232();
while(1) //Loop Forever
{
SendAllStatus();
RecieveLamp(); //recieverlamp function
delay(2000); //หน่วงเวลา 2000
}
}