找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2649|回复: 0
收起左侧

L298N可编程串口驱动器原理图+单片机源码等资料

[复制链接]
ID:280979 发表于 2018-3-18 00:46 | 显示全部楼层 |阅读模式
L298N可编程串口驱动器电路原理图:
0.jpg
简要说明:
一、尺寸:长93mmX87mmX40mm
二、主要芯片:L298N、光电耦合器 STC12C2052AD单片机
三、工作电压:输入电压(5V~12V)输入电压的大小由被控制电机的额定电压决定。
四、可驱动直流(5~12V之间电压的直流电机或者步进电机)
五、最大输出电流2A (瞬间峰值电流3A
六、最大输出功率25W
七、特点:(需要对单片机进行编程)
1、具有信号指示
2、转速可调
3、抗干扰能力强
4、具有续流保护
5、可单独控制两台直流电机
6、可单独控制一台步进电机
7PWM脉宽平滑调速(可使用PWM信号对直流电机调速)
8、可实现正反转
9、采用光电隔离
10具有扩展IO开口
11、四位LED灯指示(输出信号显示)
12、四位按键输入(可以对单片机编程实现任何控制)

主图.JPG DSC_0067.JPG DSC_0066.JPG DSC_0064.JPG DSC_0063.JPG
0.png

IO口模拟串口  能发送 能接收单片机源程序如下:
  1. #include <reg52.h>
  2. sbit PIN_RXD = P1^0; //接收引脚定义
  3. sbit PIN_TXD = P1^1; //发送引脚定义
  4. bit RxdOrTxd = 0; //指示当前状态为接收还是发送
  5. bit RxdEnd = 0; //接收结束标志
  6. bit TxdEnd = 0; //发送结束标志
  7. unsigned char RxdBuf = 0; //接收缓冲器
  8. unsigned char TxdBuf = 0; //发送缓冲器
  9. void ConfigUART(unsigned int baud);
  10. void StartTXD(unsigned char dat);
  11. void StartRXD();
  12. void main(){
  13.     EA = 1; //开总中断
  14.     ConfigUART(9600);
  15.     while (1){ //配置波特率为 9600
  16.         while (PIN_RXD); //等待接收引脚出现低电平,即起始位
  17.         StartRXD(); //启动接收
  18.         while (!RxdEnd); //等待接收完成
  19.         StartTXD(RxdBuf+1); //接收到的数据+1 后,发送回去
  20.         while (!TxdEnd); //等待发送完成
  21.     }
  22. }
  23. /* 串口配置函数,baud-通信波特率 */
  24. void ConfigUART(unsigned int baud){
  25.     TMOD &= 0xF0; //清零 T0 的控制位
  26.     TMOD |= 0x02; //配置 T0 为模式 2
  27.     TH0 = 256 - (11059200/12)/baud; //计算 T0 重载值
  28. }
  29. /* 启动串行接收 */
  30. void StartRXD(){
  31.     TL0 = 256 - ((256-TH0)>>1); //接收启动时的 T0 定时为半个波特率周期
  32.     ET0 = 1; //使能 T0 中断
  33.     TR0 = 1; //启动 T0
  34.     RxdEnd = 0; //清零接收结束标志
  35.     RxdOrTxd = 0; //设置当前状态为接收
  36. }
  37. /* 启动串行发送,dat-待发送字节数据 */
  38. void StartTXD(unsigned char dat){
  39.     TxdBuf = dat; //待发送数据保存到发送缓冲器
  40.     TL0 = TH0; //T0 计数初值为重载值
  41.     ET0 = 1; //使能 T0 中断
  42.     TR0 = 1; //启动 T0
  43.     PIN_TXD = 0; //发送起始位
  44.     TxdEnd = 0; //清零发送结束标志
  45.     RxdOrTxd = 1; //设置当前状态为发送
  46. }
  47. /* T0 中断服务函数,处理串行发送和接收 */
  48. void InterruptTimer0() interrupt 1{
  49.     static unsigned char cnt = 0; //位接收或发送计数
  50.     if (RxdOrTxd){ //串行发送处理
  51.         cnt++;
  52.         if (cnt <= 8){ //低位在先依次发送 8bit 数据位
  53.             PIN_TXD = TxdBuf & 0x01;
  54.             TxdBuf >>= 1;
  55.         }else if (cnt == 9){ //发送停止位
  56.             PIN_TXD = 1;
  57.         }else{ //发送结束
  58.             cnt = 0; //复位 bit 计数器
  59.             TR0 = 0; //关闭 T0
  60.             TxdEnd = 1; //置发送结束标志
  61.         }
  62.     }
  63.         else { //串行接收处理
  64.         if (cnt == 0){ //处理起始位
  65.             if (!PIN_RXD){ //起始位为 0 时,清零接收缓冲器,准备接收数据位
  66.                 RxdBuf = 0;
  67.                 cnt++;
  68.             }

  69.                                         else{ //起始位不为 0 时,中止接收
  70.             TR0 = 0; //关闭 T0
  71.         }
  72.         }

  73.                 else if (cnt <= 8){ //处理 8 位数据位
  74.             RxdBuf >>= 1; //低位在先,所以将之前接收的位向右移
  75.             //接收脚为 1 时,缓冲器最高位置 1,
  76.             //而为 0 时不处理即仍保持移位后的 0
  77.             if (PIN_RXD){
  78.                 RxdBuf |= 0x80;
  79.             }
  80.             cnt++;
  81.         }
  82.                 else{ //停止位处理
  83.             cnt = 0; //复位 bit 计数器
  84.             TR0 = 0; //关闭 T0
  85.             if (PIN_RXD){ //停止位为 1 时,方能认为数据有效
  86.                 RxdEnd = 1; //置接收结束标志
  87.             }
  88.         }
  89.     }
  90. }
复制代码
0.png

所有资料51hei提供下载:
GYJ-0081_298可编程串口驱动器发货资料.rar (8.08 MB, 下载次数: 16)



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表