作者syuan08 (syuan)
看板ASM
標題[問題] SPCE061A單晶片 接收/傳送
時間Thu May 30 20:17:24 2013
小弟最近在寫一隻程式
是要從手機端利用藍芽傳輸
將檔案傳輸到單晶片上執行
目前進度是單晶片上可以接收到手機所傳送來的資料
但無法回傳值給手機!!
所以想請問各位~
如果單晶片從手機端接收到"AA",並且要回傳"BB"給手機端的話該怎樣做修改?
以下是小弟的程式~
#include <SPCE061A.H>
void UART_Init();
char UART_getch();
void UART_putch(char ch);
void delay(unsigned int n);
int main()
{
unsigned int data;
int i;
char a;
const table[8]={0x4001, 0x4002, 0x4004, 0x4008,
0x4010, 0x4020, 0x4040, 0x4080};
*P_IOA_Dir=0xffff; //IOA0~IOA7 初始化為輸出
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0xffff;
UART_Init();
while(1) {
data=UART_getch(); //讀出接收的資料
UART_putch(data); // echo 回去發射端
switch (data) {
case '1': *P_IOA_Data=0x0000; //點亮 LED
break;
case '2': *P_IOA_Data=0xFFFF; //全滅led
break;
case '3'://*P_IOA_Data=0xAAAA; //間隔 LED
for (i=0; i<8; i++)
{
*P_IOA_Data = table[i]; //使LED點亮
delay(15000);
}
for (i=7; i>=0; i--)
{
*P_IOA_Data = table[i]; //使LED點亮
delay(15000);
}
break;
default : *P_IOA_Data=0xffff; //4暗4亮
}
}
}
void UART_Init()
{
char ch;
// 注意: 特殊接腳時仍須設定GPIO暫存器, 否則可能因pull-high/low而不動作
*P_IOB_Dir=0x0400; // IOB10=非反相輸出, IOB7=浮接輸入
*P_IOB_Attrib=0x0480;
*P_UART_Command1=0x20; // UART 重置
*P_UART_Command1=0x00;
*P_UART_BaudScalarHigh=0x05; // Baud=9600bps
*P_UART_BaudScalarLow=0x00;
*P_UART_Command1=0x0000; // 無同位位元
*P_UART_Command2=0x00C0; // RX/TX 致能
ch = *P_UART_Data; // 先讀取一個資料, 用來清除接收緩衝區
}
char UART_getch()
{
while(!(*P_UART_Command2&0x0080)) { //等待接收完畢
*P_Watchdog_Clear=C_WDTCLR;
}
return *P_UART_Data; // 讀取接收資料
}
void UART_putch(char ch)
{
while(!(*P_UART_Command2&0x0040)) { //等待前一次發射完畢
*P_Watchdog_Clear=C_WDTCLR;
}
*P_UART_Data = ch; // 傳送本次資料
}
void delay(unsigned int n)
{
int i;
for (i=0; i<n; i++) ;
*P_Watchdog_Clear = 0x0001; //清除看門狗計數器
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.114.136.199
1F:推 ruemann:你這程式不是有把收到的資料ECHO回去嗎? 05/30 20:56
2F:→ syuan08:可是手機那邊不知為何收不到! 05/30 21:11
3F:→ syuan08:如果我收到的是"3"我把它寫在CASE裡,我該怎樣回傳"BB"到 05/30 21:14
4F:→ syuan08:手機 05/30 21:14