Re: [問題] PC經UART傳4組PWM數值給51
※ 引述《deo2000 (800IM)》之銘言:
: 如標題
: 之前的控制,我一次都只傳一個字元,所以沒什麼問題。
: 但是現在控制目標不僅僅只於馬達運動方向了,還多了 PWM。
: 上下左右解析度都 100 的話,資訊量就暴增到 (100+100)^2=40k
馬達運動方向 1 bit,PWM資訊 1 byte.
如果你的馬達有兩顆,也不過 3 bytes,哪來的 40K ?
如果傳輸的資料 <header> <datas> <check sum>
1byte 3bytes 1byte
也不過5 bytes
: 已經非 ASCII 一個字 0~255 可以容納。
: 但是我這幾天實作 PC 送字串給 51 一直出問題,
: 先從兩個字開始做起。
: 雖然很多高手熱心幫忙解答,但在這個關鍵上都沒有改善,弄得焦頭爛額了。
: 目前 4 組 PWM 控制的實驗,若不是要靠重新燒錄改值,就是要靠 51 的 IO set,
: 實在是找不到一個可以用 PC 一次傳送這麼大量資訊的辦法。
: 是否有板友做過類似的東西,可以提供樣板或經驗呢?謝謝
BYTE data Current_State = FSM_INIT;
#define SYNC 0x40 //Guide Char '@'
BYTE data ANG_Itor;
BYTE data PWM_ANGLE[4];
BYTE data PWM_ID;
WORD data PWM_Count[4];
void ISR_Serial() interrupt Serial_ISR
{
BYTE data ch;
if(_testbit_(TI))
{
}
if(_testbit_(RI))
{
if(!Flag.rx)//Do nothing if the command not be excuted before.
{
ch = SBUF;
switch(Current_State)
{
case FSM_INIT:
if(ch == SYNC)
{
Current_State = FSM_ADDRESS;
SBUF = ch;
}
break;
case FSM_ADDRESS:
if(isalpha(ch))
{
PWM_ID = ch;
Current_State = FSM_ANGLE;
SBUF = ch;
}
break;
case FSM_ANGLE:
if(isdigit(ch))
{
PWM_ANGLE[ANG_Itor] = ch;
SBUF = ch;
++ANG_Itor;
if(ANG_Itor > 2)
{
PWM_ANGLE[ANG_Itor]=0;
ANG_Itor = 0;
Current_State = FSM_END;
}
}
if(ch == 0x0D)
{
Current_State = FSM_INIT;
PWM_ANGLE[ANG_Itor] = 0;
SBUF = ch;
ANG_Itor = 0;
Flag.rx=1;
}
break;
case FSM_END:
if(ch == 0x0D)
{
Current_State = FSM_INIT;
SBUF = ch;
ANG_Itor = 0;
Flag.rx=1;
}
break;
default: //Reset FSM
Flag.rx=0;
Current_State = FSM_INIT;
ANG_Itor = 0;
break;
}
}
}
}
--
不要問我從哪來,我只是一個浪跡天涯的工程師....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.32.206
推
08/13 03:40, , 1F
08/13 03:40, 1F
→
08/13 03:41, , 2F
08/13 03:41, 2F
因為要解釋做法很累,乾脆直接放code,不去研究怎樣做,那些code就
跟廢物一下。而且也不是啥困難的東西,那是我以前大二寫的東西。現
在也不用8051了。
推
08/13 04:11, , 3F
08/13 04:11, 3F
→
08/13 04:12, , 4F
08/13 04:12, 4F
推
08/13 11:22, , 5F
08/13 11:22, 5F
→
08/13 11:23, , 6F
08/13 11:23, 6F
※ 編輯: MasterChang 來自: 118.232.32.206 (08/13 23:02)
推
08/13 23:39, , 7F
08/13 23:39, 7F
→
08/13 23:40, , 8F
08/13 23:40, 8F
→
08/13 23:41, , 9F
08/13 23:41, 9F
→
08/13 23:41, , 10F
08/13 23:41, 10F
查表?
到現在還不知道原PO的PWM頻率多高?XD
→
08/14 00:06, , 11F
08/14 00:06, 11F
→
08/14 00:07, , 12F
08/14 00:07, 12F
※ 編輯: MasterChang 來自: 118.232.32.206 (08/14 00:11)
推
08/14 00:15, , 13F
08/14 00:15, 13F
→
08/14 00:15, , 14F
08/14 00:15, 14F
XD 我是 WolfLord 講得那種死硬派,只要跟演算法核心無關得我只
想用硬體搞定。~_~
※ 編輯: MasterChang 來自: 118.232.32.206 (08/14 00:24)
推
08/14 00:30, , 15F
08/14 00:30, 15F
推
08/14 00:30, , 16F
08/14 00:30, 16F
→
08/14 00:31, , 17F
08/14 00:31, 17F
→
08/14 00:32, , 18F
08/14 00:32, 18F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章
19
166