作者akuei0123 (离人)
看板Programming
标题[问题] 使用MPLAB C18 for pic, SPI UART的问题
时间Sat Aug 11 11:04:37 2012
大家好,我的问题是需要知道如何设定与操作SPI和USART
背景:
公司临危受命要我写一个韧体,
我的背景是应用层的软体,会点C语言,
但还没写过跟硬体连接的部分(连硬体概念都没有),
後面如果有描述不正确的请指正。
我有看MPLAB对USART和SPI的范例,以及其他讨论区的范例,
http://www.ermicro.com/blog/?p=1846
还有东拼西凑回来的知识...
架构:
PC-PIC(MCU)-设备(板子上的另一块电路板)
要写MCU里面的韧体,也就是
PC-USART-SPI-设备
使用MPLAB ICD3 C18作工具
脚位:
USART部分:
RC6:TX
RC7:RX
SPI部分:
RC5:OUT
RC4:IN
RC3:CLK
RC2:EN ,对设备的话要设为high
我有把SPI的SI和CLK拉出到示波器(也不会看 = =),都是两条横线不会变化
在猜是不是我的设定设错,再来是写的函式用法对不对..烦请指教
以下是我的程式:
void main (void)
{
//设定UART和SPI的方向与in/out
TRISC = 0;
TRISCbits.RC4 = 1;
TRISCbits.RC7 = 1;
PORTC = 0;
PORTCbits.RC4 = 1;
PORTCbits.RC2 = 1;
SPI_Write(0x20, 0x26);//对设备的0x20写入0x26
if(SPI_Read(0x20)==0x26) //若设备的0x20位置是0x26
LED_ON();//让LED亮起来
//(单独让LED亮起来这个功能验正可以动作了,但在这个if下不会)
//USART的部分还没写..前面SPI已经卡住了 >"<
}
以下是参考别人来的:
void SPI_Write(unsigned char addr,unsigned char data)
{
SSPBUF = addr;
// Wait for Data Transmit/Receipt complete
while(!SSPSTATbits.BF);
// Start Data transmission
SSPBUF = data;
// Wait for Data Transmit/Receipt complete
while(!SSPSTATbits.BF);
}
unsigned char SPI_Read(unsigned char addr)
{
SSPBUF = addr;
// Wait for Data Transmit/Receipt complete
while(!SSPSTATbits.BF);
// Send Dummy transmission for reading the data
SSPBUF = 0x00;
// Wait for Data Transmit/Receipt complete
while(!SSPSTATbits.BF);
return(SSPBUF);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.33.240