先簡單說明串列埠協議的規範:
1 通訊協議
1.1 串列埠傳送資料協議
1. 資料頭:包含1個位元組,設定為0xfd。
2.
3. 傳送命令頭:包含1個位元組,以區別不同命令。
4. 資料長度:包含1個位元組,傳送資料的長度n。
5. 資料:實際傳送資料n個位元組
6. 校驗碼:除校驗碼之外,前面所有資料按位元組相加,取低8位。
資料頭裝置位址
傳送命令頭
資料長度
資料校驗碼n
1.2 串列埠接收資料協議
1. 資料頭:包含1個位元組,設定為0xfd。
2.
3. 返回命令頭:包含1個位元組,命令執行結果。
4. 資料長度:包含1個位元組,傳送資料的長度n。
5. 資料:實際傳送資料n個位元組。
6. 校驗碼:除校驗碼之外,前面所有資料按位元組相加,低8位。
資料頭裝置位址
返回命令頭
資料長度
資料校驗碼n
**的模板如下:
#ifndef __uart_232_h
#define __uart_232_h
//#include "types.h"
#include "reg925.h"
////串列埠控制暫存器
#define uart_mode1_ena(scon = 0x50)//選擇模式1,並使能串列埠
#define brgen_close(brgcon = 0x00)//波特率發生器關閉
#define brgen_open(brgcon = 0x03)//波特率發生器開啟
#define uart_inten(x)(es = (x))//串列埠中斷使能操作
//波特率
#define bautrate_9600//
#define bautrate_19200
//#define uart_stat_idle0//空閒
#define uart_stat_rec1//接收
#define uart_stat_parse2//解析
#define uart_stat_ack3//響應
//typedef struct uart_stat_bit
uart_stat_bit;
typedef union uart_stat
uart_stat;
//externvoid uart232_init(void);
extern void uart232_debug(u8 ucdebug);
extern void uart232_isp();
extern void uart232_reboot();
extern u8uart232_ack(u8 uccmd);
extern void uart232_run(void);
extern u8uart232_getstate(uart_stat* puartstat);
//#endif//__uart_232_h
實現檔案:
#include "uart232.h"
///uart_stat m_uartstat;
u32 m_uluarttime;
u8m_ucuartbuf[uart_buf_size];
////
void (*exisp)(void) = 0x1e46;//isp指標函式
////初始化串列埠
void uart232_init(void)
//串列埠中斷接收
void uart_int (void)interrupt 4
else
ti = 0;
}else if(ri) //接收中斷
}else if(m_uartstat.stat.stat == uart_stat_rec)
m_uartstat.stat.reccnt++;
if ( m_uartstat.stat.reccnt > frame_o_len && m_uartstat.stat.reccnt >= m_ucuartbuf[frame_o_len] + frame_size )
}m_uluarttime = g_ulcurtickcount;
}es = 1; //開啟串列埠中斷
}void uart232_run(void)
}switch(m_uartstat.stat.stat)
if(m_uartstat.stat.reboot)
}break;
case uart_stat_rec:
break;
case uart_stat_ack://響應
}break;
case uart_stat_parse://解析
default:
}else if(ucerr == err_com_addr)
else
packageframe(m_ucuartbuf, m_ucuartbuf[frame_o_len], g_bydevaddr);
m_uartstat.stat.sndcnt = 0;
m_uartstat.stat.stat = uart_stat_ack;
m_uluarttime = g_ulcurtickcount;
sbuf = m_ucuartbuf[m_uartstat.stat.sndcnt];
}break;}}
void uart232_debug(u8 ucdebug)
void uart232_isp()
void uart232_reboot()
u8uart232_ack(u8 uccmd)
return ucret;
}u8 uart232_getstate(uart_stat* puartstat)
//
P89C52X2微控制器解密P89系列
p89c52x2主要功能特性 80c51 cpu 8kb flash 256 位元組ram 布林處理器,全靜態操作 12個時鐘操作具有可選的6 個時鐘操作 儲存位址能力 達到64kb rom和64kbram 電源控制模式 時鐘可以停止和恢復 閒置模式 掉電模式 2 個速度範圍 0 20mhz 具有6...
51微控制器(一) 初學STC89C52微控制器
1.cpu運算器和控制器 微控制器的核心構成部分之一 2.內部資料儲存器存放可讀的資料,如程式中的定義。3.程式儲存器8kb,0000h 1fffh 存放程式,原始資料。4.定時 計算器3個定時器 計算器,即可設定成計數方式用於外部事件計數,也可以設定成定時模式,用於對微控制器的計時控制。5.並行埠...
89C52微控制器之串列埠
include include define uint unsigned int define uchar unsigned char uchar flag 0 uchar buf 0x55 u void init t1 定時器1 void uart init 串列埠 void uart1 send...