L298N可編程串口驅(qū)動(dòng)器電路原理圖:
簡(jiǎn)要說(shuō)明: 一、尺寸:長(zhǎng)93mmX 寬87mmX 高40mm
二、主要芯片:L298N 、光電耦合器 STC12C2052AD 單片機(jī)
三、工作電壓:輸入電壓(5V~12V )輸入電壓的大小由被控制電機(jī)的額定電壓決定。
四、可驅(qū)動(dòng)直流(5~12V 之間電壓的直流電機(jī)或者步進(jìn)電機(jī))
五、最大輸出電流2A (瞬間峰值電流3A)
六、最大輸出功率25W
七、特點(diǎn):(需要對(duì)單片機(jī)進(jìn)行編程)
1 、具有信號(hào)指示
2 、轉(zhuǎn)速可調(diào)
3 、抗干擾能力強(qiáng)
4 、具有續(xù)流保護(hù)
5 、可單獨(dú)控制兩臺(tái)直流電機(jī)
6 、可單獨(dú)控制一臺(tái)步進(jìn)電機(jī)
7 、PWM脈寬平滑調(diào)速(可使用PWM信號(hào)對(duì)直流電機(jī)調(diào)速)
8 、可實(shí)現(xiàn)正反轉(zhuǎn)
9 、采用光電隔離
10 、具有擴(kuò)展IO 開(kāi)口
11 、四位LED燈指示(輸出信號(hào)顯示)
12 、四位按鍵輸入(可以對(duì)單片機(jī)編程實(shí)現(xiàn)任何控制)
IO口模擬串口 能發(fā)送 能接收單片機(jī)源程序如下:
- #include <reg52.h>
- sbit PIN_RXD = P1^0; //接收引腳定義
- sbit PIN_TXD = P1^1; //發(fā)送引腳定義
- bit RxdOrTxd = 0; //指示當(dāng)前狀態(tài)為接收還是發(fā)送
- bit RxdEnd = 0; //接收結(jié)束標(biāo)志
- bit TxdEnd = 0; //發(fā)送結(jié)束標(biāo)志
- unsigned char RxdBuf = 0; //接收緩沖器
- unsigned char TxdBuf = 0; //發(fā)送緩沖器
- void ConfigUART(unsigned int baud);
- void StartTXD(unsigned char dat);
- void StartRXD();
- void main(){
- EA = 1; //開(kāi)總中斷
- ConfigUART(9600);
- while (1){ //配置波特率為 9600
- while (PIN_RXD); //等待接收引腳出現(xiàn)低電平,即起始位
- StartRXD(); //啟動(dòng)接收
- while (!RxdEnd); //等待接收完成
- StartTXD(RxdBuf+1); //接收到的數(shù)據(jù)+1 后,發(fā)送回去
- while (!TxdEnd); //等待發(fā)送完成
- }
- }
- /* 串口配置函數(shù),baud-通信波特率 */
- void ConfigUART(unsigned int baud){
- TMOD &= 0xF0; //清零 T0 的控制位
- TMOD |= 0x02; //配置 T0 為模式 2
- TH0 = 256 - (11059200/12)/baud; //計(jì)算 T0 重載值
- }
- /* 啟動(dòng)串行接收 */
- void StartRXD(){
- TL0 = 256 - ((256-TH0)>>1); //接收啟動(dòng)時(shí)的 T0 定時(shí)為半個(gè)波特率周期
- ET0 = 1; //使能 T0 中斷
- TR0 = 1; //啟動(dòng) T0
- RxdEnd = 0; //清零接收結(jié)束標(biāo)志
- RxdOrTxd = 0; //設(shè)置當(dāng)前狀態(tài)為接收
- }
- /* 啟動(dòng)串行發(fā)送,dat-待發(fā)送字節(jié)數(shù)據(jù) */
- void StartTXD(unsigned char dat){
- TxdBuf = dat; //待發(fā)送數(shù)據(jù)保存到發(fā)送緩沖器
- TL0 = TH0; //T0 計(jì)數(shù)初值為重載值
- ET0 = 1; //使能 T0 中斷
- TR0 = 1; //啟動(dòng) T0
- PIN_TXD = 0; //發(fā)送起始位
- TxdEnd = 0; //清零發(fā)送結(jié)束標(biāo)志
- RxdOrTxd = 1; //設(shè)置當(dāng)前狀態(tài)為發(fā)送
- }
- /* T0 中斷服務(wù)函數(shù),處理串行發(fā)送和接收 */
- void InterruptTimer0() interrupt 1{
- static unsigned char cnt = 0; //位接收或發(fā)送計(jì)數(shù)
- if (RxdOrTxd){ //串行發(fā)送處理
- cnt++;
- if (cnt <= 8){ //低位在先依次發(fā)送 8bit 數(shù)據(jù)位
- PIN_TXD = TxdBuf & 0x01;
- TxdBuf >>= 1;
- }else if (cnt == 9){ //發(fā)送停止位
- PIN_TXD = 1;
- }else{ //發(fā)送結(jié)束
- cnt = 0; //復(fù)位 bit 計(jì)數(shù)器
- TR0 = 0; //關(guān)閉 T0
- TxdEnd = 1; //置發(fā)送結(jié)束標(biāo)志
- }
- }
- else { //串行接收處理
- if (cnt == 0){ //處理起始位
- if (!PIN_RXD){ //起始位為 0 時(shí),清零接收緩沖器,準(zhǔn)備接收數(shù)據(jù)位
- RxdBuf = 0;
- cnt++;
- }
- else{ //起始位不為 0 時(shí),中止接收
- TR0 = 0; //關(guān)閉 T0
- }
- }
- else if (cnt <= 8){ //處理 8 位數(shù)據(jù)位
- RxdBuf >>= 1; //低位在先,所以將之前接收的位向右移
- //接收腳為 1 時(shí),緩沖器最高位置 1,
- //而為 0 時(shí)不處理即仍保持移位后的 0
- if (PIN_RXD){
- RxdBuf |= 0x80;
- }
- cnt++;
- }
- else{ //停止位處理
- cnt = 0; //復(fù)位 bit 計(jì)數(shù)器
- TR0 = 0; //關(guān)閉 T0
- if (PIN_RXD){ //停止位為 1 時(shí),方能認(rèn)為數(shù)據(jù)有效
- RxdEnd = 1; //置接收結(jié)束標(biāo)志
- }
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
GYJ-0081_298可編程串口驅(qū)動(dòng)器發(fā)貨資料.rar
(8.08 MB, 下載次數(shù): 16)
2018-3-18 00:46 上傳
點(diǎn)擊文件名下載附件
|