/************************************************************************************/
/* 程式名:LTC1595讀寫代碼 */
/* */
/* 晶振: 20M CPU型號: PIC16F877A */
/* */
/* 作者: Randy 日期: 2010-08-27 */
/* */
/************************************************************************************/
#include <pic.h>
__CONFIG(0X3732);
#define SRI RC4
#define CLK RC3
#define LD RC5
unsigned int tmp[4]={0};
unsigned int shuju;
void SPISend(unsigned int data)
{
int i;
unsigned int outdata;
outdata = data;
LD=1;
for(i = 0; i < 16; i++)
{
if(outdata & 0x8000)
SRI= 1;
else
SRI=0;
outdata <<= 1;
CLK=0;
CLK=1; //上升沿發數據
}
LD=0;
// LD=1;//發送數據
}
//-----------MCU初始化-----------//
void initial ()
{
TRISC=0XC0;
SPBRG=0X81; //設置串列傳輸速率為9600BPS
TXSTA=0X24; //使能串口發送,選擇高速串列傳輸速率
RCSTA=0X90; //使能串口工作2,連續接收
RCIE=0X1; //使能接收中斷
GIE=0X1; //開放全局中斷
PEIE=0X1; //使能外部中斷
}
//------------------------延時--------------------------------//
void delay_1s(unsigned int x)
{
unsigned a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void interrupt Receive(void)
{
int i,temp;
unsigned int tmp[4]={0};
shuju=0;
if(RCIE&&RCIF)
{ //數據接收轉換
for(i=0;i<4;i++)
{
temp=RCREG;
if(temp<0X3A)
tmp=(temp-0X30);
else
tmp=(RCREG-0X37);
delay_1s(10);
tmp<<=((3-i)*4);
shuju|=tmp;
}
SPISend(shuju);
}
}
main()
{
initial ();
while(1)
{;}
}
文章评论(0条评论)
登录后参与讨论