STC12C5A60S2单片机 串口调试

与串口1中断相关的寄存器有IE、IPH和IP

串口中断允许位ES位于中断允许寄存器IE中。

EA:CPU的总中断允许控制位,EA=1,CPU开总中断;EA=0,CPU关总中断。各中断源首先受EA控制,其次还受各中断源自己的中断允许控制位控制。

与串口2中断相关的寄存器IE2、IP2H和IP2

串口2中断允许为ES2位于中断寄存器IE2中。

 1 #ifndef _UART_H_
 2 #define _UART_H_
 3
 4 #define uchar   unsigned char
 5 #define uint    unsigned int
 6
 7 //定义串口1口开关,关闭则不能接收数据
 8 #define OpenUART1()     ES=1
 9 #define CloseUART1()    ES=0
10 #define OpenUART2()     IE2|=0x01
11 #define CloseUART2()    IE2&=0xFE
12
13 //缓存串口1和串口2接收到的字符
14 extern uchar UART1_Recv_Val;
15 extern uchar UART2_Recv_Val;
16
17 void UART1_Init(uchar RELOAD, bit doubleBaud, bit timeMod);
18 void UART2_Init(uchar RELOAD, bit doubleBaud, bit timeMod);
19 void UART1_SendOneChar(uchar val);
20 void UART2_SendOneChar(uchar val);
21 void UART1_SendStr(uchar *str);
22 void UART2_SendStr(uchar *str);
23 #endif

uart.c代码如下:

  1 #include <STC12C5A.H>     //STC12C5A系列单片机
  2 #include <intrins.h>
  3 #include "UART.H"
  4
  5 #define uchar   unsigned char
  6 #define uint    unsigned int
  7
  8 //缓存串口1和串口2接收到的字符
  9 uchar UART1_Recv_Val = 0;
 10 uchar UART2_Recv_Val = 0;
 11
 12
 13
 14 void UART1_Init(uchar RELOAD, bit doubleBaud, bit timeMod)
 15 {
 16     SCON |= 0x50;       //串口1方式1,接收充许
 17
 18     BRT = RELOAD;       //波特率2400
 19
 20     if (timeMod == 1)       //1T
 21     {
 22         //T0x12   T1x12   UM0x6   BRTR    S2SMOD  BRTx12  EXTRAM  S1BRS
 23         AUXR |= 0x15;       //串口1使用独立波特率发生器,独立波特率发生器1T
 24     }
 25     else                    //12T
 26     {
 27         AUXR |= 0x11;
 28     }
 29
 30     if (doubleBaud == 1)
 31     {
 32         PCON |= 0x80;     //波特率加倍
 33     }
 34     else
 35     {
 36         PCON &= 0x7F;     //波特率不加倍
 37     }
 38
 39     EA = 1;
 40     ES = 1;             //充许串口1中断
 41 }
 42
 43
 44
 45 void UART2_Init(uchar RELOAD, bit doubleBaud, bit timeMod)
 46 {
 47     //S2SM0  S2SM1   S2SM2   S2REN   S2TB8   S2RB8   S2TI     S2RI
 48     S2CON |= 0x50;      //串口2,方式1,接收充许
 49
 50     BRT = RELOAD;
 51
 52     if (timeMod == 1)       //1T
 53     {
 54         //T0x12   T1x12   UM0x6   BRTR    S2SMOD  BRTx12  EXTRAM  S1BRS
 55         AUXR |= 0x14;       //串口1使用独立波特率发生器,独立波特率发生器1T
 56     }
 57     else                    //12T
 58     {
 59         AUXR = (AUXR | 0x10) & 0xFB;
 60     }
 61
 62     if (doubleBaud == 1)
 63     {
 64         AUXR |= 0x08;       //波特率加倍
 65     }
 66     else
 67     {
 68         AUXR &= 0xF7;       //波特率不加倍
 69     }
 70
 71     EA = 1;
 72     //-       -       -       -       -       -       ESPI    ES2
 73     IE2 |= 0x01;            //充许串口2中断
 74 }
 75
 76
 77
 78 void UART1_SendOneChar(uchar val)
 79 {
 80     //ES = 0;                   //关闭串口1中断
 81
 82     SBUF = val;
 83     while(TI == 0);
 84     TI = 0;
 85
 86     //ES = 1;                  //恢复串口1中断
 87 }
 88
 89
 90
 91 void UART2_SendOneChar(uchar val)
 92 {
 93     //IE2 = 0x00;                 //关闭串口2中断
 94
 95     S2BUF = val;
 96     while ((S2CON & 0x02) == 0);
 97     S2CON &= 0xFD;
 98
 99     //IE2 = 0x01;                //恢复串口2中断
100 }
101
102
103
104 void UART1_SendStr(uchar *str)
105 {
106     while( (*str)!=‘/0‘ )
107     {
108         UART1_SendOneChar(*str);
109         str++;
110     }
111 }
112
113
114
115 void UART2_SendStr(uchar *str)
116 {
117     while( (*str)!=‘/0‘ )
118     {
119         UART2_SendOneChar(*str);
120         str++;
121     }
122 }
123
124
125
126 void UART1_Int(void) interrupt 4
127 {
128     if (RI == 1)
129     {
130         RI = 0;
131         UART1_Recv_Val = SBUF;
132     }
133 }
134
135
136
137 void UART2_Int(void) interrupt 8
138 {
139     if ((S2CON & 0x01) == 1)
140     {
141         S2CON &= 0xFE;
142         UART2_Recv_Val = S2BUF;
143     }
144 }  
时间: 2024-10-12 21:47:25

STC12C5A60S2单片机 串口调试的相关文章

STC12C5A60S2单片机 PWM调试

#include <REG52.H> #include <intrins.h> #define U8 unsigned char #define U16 unsigned int /******************************************************************** ÑÓʱº¯Êý *********************************************************************/ voi

keil中的串口调试:

keil中串口的虚拟调试信息在通过View-serial windows-#usart1/2/3/4/debug(printf)可以看到.当然也可以通过虚拟串口VSPD+串口调试助手在外部实现,方法如下: 虚拟 串口使用:步骤 1 下载虚拟串口软件,虚拟2个连接的串口COMA/COMB,这两个串口与PC机的真实物理串口没关系.两边的设置相同 2 打开串口通讯助手,将A分配给串口通讯助手,则B就分配给下面的COMx 2 在MDK中输入命令行或者将下面的做成debug.ini文件加载 MODE CO

51单片机串口通信

一.原理简介 51 单片机内部有一个全双工串行接口.什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行:既可接收又可发送,但不能同时进行的称为半双工:能同时接收和发送的串行口称为全双工串行口.串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信.其缺点是传输速度较低. 与之前一样,首先我们来了解单片机串口相关的寄存器. SBUF 寄存器:它是两个在物理上独立的接收.发送缓冲器,可同时发送.接收数据,可通过指令对SBUF 的读写

2015.8.3stm32f4串口调试记录

由于最近要做一个IRIGB的转码模块,需要从GPS模块获取时间数据,处理器和GPS采用串口通信的方式.由于串口通信用得太多,就直接上手将串口的配置代码写完,然后试着用串口发送一个字符‘2‘,然后通过PC上的串口调试助手,可以看到我收到的是一个’向上的箭头‘.于是问题来了,对于我这个单片机玩了都不玩的人来说,这似乎有点弱智,可是我调了一下午也没发现什么端倪,因为,这个代码确实是比较简单.最后没有办法只有用百度去搜搜类似的问题,百度上答案无非都是在说是时钟配置问题,但是这一点我似乎不太相信.因为之前

深入理解51单片机串口通信

串口通信的基本认识 通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高.以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行信号输出,类似于8个车道可以过去8辆车,这样的形式是并行的,一般称P0,P1,P2,P3为51单片机的4组并行总线. 串行通信,就是一个车道,一个只能通过一辆车,如果一个0x55这样一个字节的数据要传输过去的话,假如低位在前,高位在后的话,那发送方式是:0-1-0-1-0-1-0-1,一位一位的进行

新一代优秀串口助手-小蜂串口调试助手

小蜂串口调试助手Ver1.0是非常好用的串口调试工具,可以实现的功能包括发送接收16进制数.字符串,另所有拥有目前领先其它串口工具独有功能,可以在一个窗口上显示两个串口界面.无须安装,直接使用,界面简洁,清晰,操作简单.适宜单片机编程时对RS232的通讯和测试以及所有有串口工作. 在使用小蜂串口助手之前,必须先安装Microsoft.NET Framework 4.5.exe或以上版本软件,微软官方网站下载地址:http://www.microsoft.com/net/ 百度网盘下载地址: ht

8051单片机串口波特率计算方式

STC12C5A60S2单片机兼容80C51单片机,其串口波特率可以由定时器产生,也可以由独立波特率发生器产生.其波特率模式可以是固定的,也可以是可变的. 固定波特率:当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 0时,其波特率 = SYSclk/12 当 模式0的通信速度设置 位UART_M0x6/AUXR.5 = 1时,其波特率 = SYSclk/2 可变波特率:使用串行通信模式2,即可自定义串口通信波特率,其计算公式为:波特率 = 2^SMODE /64×( SYScl

用Tkinter实现一个串口调试助手

2020年元旦,武汉出现了不明原因肺炎,搞得人心惶惶,只好宅在家里.闲着也是闲着,于是把很久之前用python写的一个串口调试助手再修改一下. 简单说明一下: 以前是准备在debian系统里调试单片机用的,基于python 2.6,GUI是用自带Tkinter做的,不用安装第三方库. 修改了之后,可以跨linux.windows平台(我没有MacOS系统,只能放弃),python 2.6/2.7/3.7都简单测试了一下,暂时只能说都可以用. 只实现了基本功能,没有自动发送.发送文件.保存等功能,

VELT-0.1.5开发: gdb串口调试内核时信息丢失的问题

快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs2013 + velt-0.1.5 VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可