PIC單片機(jī)雙機(jī)異步通信程序
#include
/*該程序實(shí)現(xiàn)單片機(jī)雙機(jī)異步通信功能,該程序是發(fā)送部分*/
unsigned char tran[8]; /*定義一個數(shù)組存儲發(fā)送數(shù)據(jù)*/
unsigned char k,data; /*定義通用寄存器*/
cONST char table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
/*不帶小數(shù)點(diǎn)的顯示段碼表*/
/*SPI顯示初始化子程序*/
void SPIINIT()
{
PIR1=0;
SSPCON=0x30;
SSPSTAT=0xC0;
/*設(shè)置SPI的控制方式,允許SSP方式,并且時鐘下降沿發(fā)送,與74HC595,當(dāng)其
*SCLK從低到高跳變時,串行輸入寄存器的特點(diǎn)相對應(yīng)*/
TRISC=0xD7; /*SDO引腳為輸出,SCK引腳為輸出*/
TRISA5=0; /*RA5引腳設(shè)置為輸出,以輸出顯示鎖存信號*/
}
/*給數(shù)組賦初值子程序 */
void fuzhi()
{
for(k=0;k8;k ) {
tran[k]=k 3;
}
}
/*SCI部件初始化子程序*/
void sciint()
{
SPBRG=0X19; /*將傳輸?shù)牟ㄌ芈试O(shè)為約9 600位/秒*/
TXSTA=0X04; /*選擇異步高速方式傳輸8位數(shù)據(jù)*/
RCSTA=0X80; /*允許同步串行口工作*/
TRISC6=1;
TRISC7=1; /*將RC6、RC7設(shè)置為輸入方式,對外部呈高阻狀態(tài)*/
}
/*SPI傳輸數(shù)據(jù)子程序*/
void SPILED(data)
{
SSPBUF=data; /*啟動發(fā)送*/
do {
;
}while(SSPIF==0);
SSPIF=0;
}
/*顯示子程序,顯示8位數(shù)*/
void display()
{
RA5=0; /*準(zhǔn)備鎖存*/
for(k=0;k8;k ) {
data=tran[k];
data=table[data]; /*查得顯示的段碼*/
SPILED(data); /*發(fā)送顯示段碼*/
}
RA5=1; /*最后給一個鎖存信號,代表顯示任務(wù)完成*/
}
/*主程序*/
main()
{
SPIINIT();
fuzhi(); /*給數(shù)組賦初值*/
sciint(); /*SCI部件初始化*/
di(); /*中斷禁止*/
TXEN=1; /*發(fā)送允許*/
CREN=1; /*接收數(shù)據(jù)允許*/
for(k=0;k8;k ){
TXREG=tran[k]; /*發(fā)出一個字符*/
while(1){
if(TXIF==1) break;
} /*等待寫入完成*/
while(1){
if(RCIF==1) break;/*若收到響應(yīng)字節(jié),則終止等待*/
}
RCREG=RCREG; /*讀響應(yīng)字節(jié),清RCIF*/
}
display(); /*顯示發(fā)送的數(shù)據(jù)*/
while(1){
;
}
}
51單片機(jī)相關(guān)文章:51單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
評論