串口

news/2024/11/30 1:53:56/

dbg_print怎么打开?

 

哪个宏控制呢?

DRV_DEBUG打开后串口还是没有信息出来

make/drv/drv.def
中加入DRV_DEBUG

 

我一般在dbgprint.c里面直接修改
#if 1//def  DRV_DEBUG
#if 1//(!defined(IC_MODULE_TEST))

--------------------------------------------------------------------

{

char buffer[50];

sprintf(buffer, "ERROR");
rmmi_write_to_uart((kal_uint8*)buffer, strlen(buffer), KAL_TRUE);

}

--------------------------------------------------------------------

断开串口COM1的2、3引脚吧,应该和单片机互动起来才有应用的价值。之前,我们要有一块拥有串口功能的单片机实验板或是嵌入目标板,否则请您检查一下IE的地址栏,看看您是不是错输入了网址来到我的博客,希望我的地址和黄色小说的地址字符并不接近。在百度里输入“单片机串口电路”,答案会挤进您的眼睛里,那我就不费口水了。
    全当您有了我们所需要的设备,在51的FLASH中写入下面的程序。在超级终端上会发现同样自慰的效果。

---------
#include <AT89X51.h>
#include <string.h>

//BAUD SET == 19200 8 NOR 1   NOR

//主程序
void main()
{
   unsigned char dat;
    SCON = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
    PCON |= 0x80;       //SMOD=1;
    TH1   = 0xFD;       //Baud:9600 fosc=11.0592MHz
    IE   |= 0x90;       //Enable Serial Interrupt
    TR1   = 1;          // timer 1 run

   while(1)
   {
       if ( RI )
       {
            dat = SBUF;   //接收数据 SBUF 为单片机的接收发送缓冲寄存器
            RI = 0;
            SBUF = dat;   //发送数据
       }
   }
}
-----------------------

 


4. 有趣的功能
================================
    向串口打印字符吧,应该是有趣的事了。您可以在超级终端上打出你想对女友说却又不敢说的话。还

可以把关键的字眼改变颜色、加亮或是闪烁显示,还可以用/n(换行)、/r(归位)、/x00(十六进制输

入)来设置一个美丽的图景。当然,这是大炮打蚊子,她看了不会感动的,就自己感动一下算了。
    下面的程序里我用到了上面我提过的功能,有兴趣研究一下是一件好事,不然就看下一节。

#i nclude <AT89X51.h>
#i nclude <string.h>

void send_char_com(unsigned char ch);
void send_string_com(unsigned char *str);
void init_serialcomm(void);
void Delay(unsigned int a);

//串口初始化
void init_serialcomm(void) //btl == 19200
{
    SCON = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
    TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
    PCON |= 0x80;       //SMOD=1;
    TH1   = 0xFD;       //Baud:9600 fosc=11.0592MHz
    IE   |= 0x90;       //Enable Serial Interrupt
    TR1   = 1;          // timer 1 run
}


//串口接收中断函数
void serial () interrupt 4 using 3
{
    if(RI)
    {
        unsigned char ch;
        RI = 0;
send_string_com("/x0c");
//send_char_com(0x0c);
x_welcome (); //显示欢迎画面
x_menu ( );
}
}

//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI == 0);
TI=0;
}

//向串口发送一个字符串,长度不限。
//应用:send_string_com("d9887321$");
void send_string_com(unsigned char *str)
{
while(*str != '/0')
        {
   send_char_com(*str);
         *str++;
        }
*str = 0;
}

//欢迎画面(启动时显示)
void x_welcome ( void )
{
send_string_com("/x0c/n/r/033[1;34m");
send_string_com("欢迎使用串口控制平台          ");
send_string_com("/n/rby DoYoung V1.0 2006.11.11");
}


//
void x_menu ( void )
{

send_string_com("/n/n/r/033[1;31mUART> /033[1;30m");
send_string_com("请输入功能序号:        ");
send_string_com("/n/r/033[1;31mdoyoung> /033[1;30m");
}


void x_run ( void )
{
send_string_com("/b/x5c");
Delay(200);
send_string_com("/b|");
Delay(200);
send_string_com("/b/");
Delay(200);
send_string_com("/b-");
Delay(200);

}

void Delay(unsigned int a)
{
unsigned char i;
while( --a != 0)
{
   for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
}          //i 从0加到125,CPU大概就耗时1毫秒
}

//主程序
main()
{
init_serialcomm(); //初始化串口
x_welcome (); //显示欢迎画面
x_menu ();
    while(1)
    {
x_run ( ) ;           
    }
}
------------


5. ASC II码表和转义字符
================================
    我们输入的显示字符都是ASC II的标准,了解这个有必要。对于一些特殊的指令,ASC II则用转义字

符更为方便。


------------
Decimal   Octal   Hex    Binary     Value
          10       08     16      02   
        -------    -----      *---       ------            -----

         000      000    000   00000000      NUL    (Null char.)

         001      001    001   00000001      SOH    (Start of Header)发送文件首

         002      002    002   00000010      STX    (Start of Text)文本开始

         003      003    003   00000011      ETX    (End of Text)文本尾

         004      004    004   00000100      EOT    (End of Transmission)发送结束

         005      005    005   00000101      ENQ    (Enquiry)

         006      006    006   00000110      ACK    (Acknowledgment)确认

         007      007    007   00000111      BEL    (Bell)蜂鸣

         008      010    008   00001000       BS    (Backspace)退格

         009      011    009   00001001       HT    (Horizontal Tab)

         010      012    00A   00001010       LF    (Line Feed)换行

         011      013    00B   00001011       VT    (Vertical Tab)

         012      014    00C   00001100       FF    (Form Feed)换页/清屏

         013      015    00D   00001101       CR    (Carriage Return)回车

         014      016    00E   00001110       SO    (Shift Out)SHIFT 松开

         015      017    00F   00001111       SI    (Shift In)按下

         016      020    010   00010000      DLE    (Data Link Escape)清除

         017      021    011   00010001      DC1 (XON) (Device Control 1)

         018      022    012   00010010      DC2       (Device Control 2)

         019      023    013   00010011      DC3 (XOFF)(Device Control 3)

         020      024    014   00010100      DC4       (Device Control 4)

         021      025    015   00010101      NAK    (Negative Acknowledgement)

         022      026    016   00010110      SYN    (Synchronous Idle)

         023      027    017   00010111      ETB    (End of Trans. Block)

         024      030    018   00011000      CAN    (Cancel)

         025      031    019   00011001       EM    (End of Medium)

         026      032    01A   00011010      SUB    (Substitute)

         027      033    01B   00011011      ESC    (Escape)退出

         028      034    01C   00011100       FS    (File Separator)

         029      035    01D   00011101       GS    (Group Separator)

         030      036    01E   00011110       RS    (Request to Send/Record Separator)

         031      037    01F   00011111       US    (Unit Separator)

         032      040    020   00100000       SP    (Space)空格

         033      041    021   00100001        !    (exclamation mark)

         034      042    022   00100010        "    (double quote)

         035      043    023   00100011        #    (number sign)

         036      044    024   00100100        $    (dollar sign)

         037      045    025   00100101        %    (percent)

         038      046    026   00100110        &    (ampersand)

         039      047    027   00100111        '    (single quote)

         040      050    028   00101000        (    (left/opening parenthesis)

         041      051    029   00101001        )    (right/closing parenthesis)

         042      052    02A   00101010        *    (asterisk)

         043      053    02B   00101011        +    (plus)

         044      054    02C   00101100        ,    (comma)

         045      055    02D   00101101        -    (minus or dash)

         046      056    02E   00101110        .    (dot)

         047      057    02F   00101111        /    (forward slash)

         048      060    030   00110000        0

         049      061    031   00110001        1

         050      062    032   00110010        2

         051      063    033   00110011        3

         052      064    034   00110100        4

         053      065    035   00110101        5

         054      066    036   00110110        6

         055      067    037   00110111        7

         056      070    038   00111000        8

         057      071    039   00111001        9

         058      072    03A   00111010        :    (colon)

         059      073    03B   00111011        ;    (semi-colon)

         060      074    03C   00111100        <    (less than)

         061      075    03D   00111101        =    (equal sign)

         062      076    03E   00111110        >    (greater than)

         063      077    03F   00111111        ?    (question mark)

         064      100    040   01000000        @    (AT symbol)

         065      101    041   01000001        A

         066      102    042   01000010        B

         067      103    043   01000011        C

         068      104    044   01000100        D

         069      105    045   01000101        E

         070      106    046   01000110        F

         071      107    047   01000111        G

         072      110    048   01001000        H

         073      111    049   01001001        I

         074      112    04A   01001010        J

         075      113    04B   01001011        K

         076      114    04C   01001100        L

         077      115    04D   01001101        M

         078      116    04E   01001110        N

         079      117    04F   01001111        O

         080      120    050   01010000        P

         081      121    051   01010001        Q

         082      122    052   01010010        R

         083      123    053   01010011        S

         084      124    054   01010100        T

         085      125    055   01010101        U

         086      126    056   01010110        V

         087      127    057   01010111        W

         088      130    058   01011000        X

         089      131    059   01011001        Y

         090      132    05A   01011010        Z

         091      133    05B   01011011        [    (left/opening bracket)

         092      134    05C   01011100        /    (back slash)

         093      135    05D   01011101        ]    (right/closing bracket)

         094      136    05E   01011110        ^    (caret/cirumflex)

         095      137    05F   01011111        _    (underscore)

         096      140    060   01100000        `

         097      141    061   01100001        a

         098      142    062   01100010        b

         099      143    063   01100011        c

         100      144    064   01100100        d

         101      145    065   01100101        e

         102      146    066   01100110        f

         103      147    067   01100111        g

         104      150    068   01101000        h

         105      151    069   01101001        i

         106      152    06A   01101010        j

         107      153    06B   01101011        k

         108      154    06C   01101100        l

         109      155    06D   01101101        m

         110      156    06E   01101110        n

         111      157    06F   01101111        o

         112      160    070   01110000        p

         113      161    071   01110001        q

         114      162    072   01110010        r

         115      163    073   01110011        s

         116      164    074   01110100        t

         117      165    075   01110101        u

         118      166    076   01110110        v

         119      167    077   01110111        w

         120      170    078   01111000        x

         121      171    079   01111001        y

         122      172    07A   01111010        z

         123      173    07B   01111011        {    (left/opening brace)

         124      174    07C   01111100        |    (vertical bar)

         125      175    07D   01111101        }    (right/closing brace)

         126      176    07E   01111110        ~    (tilde)

         127      177    07F   01111111      DEL    (delete)

常用的转义字符

在windows自带的超级终端中,如何清屏?
--通过发送0x0C(12)即可实现清屏。
--在“输入字符串”内容中输入 /x0c

/0 :字符串结束标志;
--- 在上面的程序里找到 while(*str != '/0') ,您就会知道 /0 的功能了。它可以表示字符串的结束

,您可以不用担心指针会溢出。

/n :换行(asc II码为10);
--- 一般和 /r 配合使用以代表回车。因为 /n 只是表示换行而并不让光标回到行首, /r 是实现了回行

首的功能。
          
/t :横向跳格;                             
/b :退格;

/r :回车(ascⅱ码为13);
--- 说过了。

/f :走纸换页;
// :字符/(ascⅱ码为92);
--- / 是转义字符的表示符,当只想打一个 / 时就可以打两个。
          
/' :单引号;
--- ' 在C里有特殊用法,所以这个表示只打印这个符号。
                                  
'/"':双引号;
---同上

/d05:用8进制表示字符;

/x1c:用16进制表示字符
--- 有一些功能没有转义字符,我们就可以用这个指令直接表示指令。/x1c 相当于发送 0x1c 对应的ASC

码功能。

6. 关于颜色
================================
在 ANSI 兼容终端里,可以用彩色显示文本而不仅仅是黑白。但是我们自己编写的程序能否输出彩色的字符呢?当然答案是肯定的。下面的语句就输出高亮的黑色背景的绿色字。
printf("/033[1;40;32m good!!! /033[0m Hello,NSFocus /n");
/033 声明了转义序列的开始,然后是 [ 开始定义颜色。后面的 1 定义了高亮显示字符。然后是背景颜色,这里面是40,表示黑色背景。接着是前景颜色,这里面是32,表示绿色。我们用 /033[0m 关闭转义序列, /033[0m 是终端默认颜色。
    通过上面的介绍,就知道了如何输出彩色字符了。因此,我就不再多说了。下面是对于彩色字符颜色的一些定义:
    前景            背景              颜色
    ---------------------------------------
    30                40              黑色
    31                41              紅色
    32                42              綠色
    33                43              黃色
    34                44              藍色
    35                45              紫紅色
    36                46              青藍色
    37                47              白色

    代码              意义
    -------------------------
    0                终端默认设置(一般的默认为黑底白字)
    1                高亮显示
    4                使用下划线
    5                闪烁
    7                反白显示
    8                不可见

7. 尾声
================================
    在嵌入式系统开发上,超级终端是相当有用的家伙,许多DEBUG程序都是用串口的,这里了解的更多的是ASC II码的一些特点。而了解这一些,使我们有许多想像。我们可以用超级终端来代替VB语言写的上位机程序,电脑上不用安装,只要有串口就行。可以实现数据采集的电脑显示,或是用电脑串口控制下位机的设备。任君想来!


http://www.ppmy.cn/news/252076.html

相关文章

C++串口同步和异步的读取与串口设备编程

本文主要讲述如何对串口进行高效率的读写&#xff0c;当串口中数据到达时立即读取进行处理&#xff0c;以及如何将该方法运用到串口设备编程中。为了使得程序更加清晰文中的代码去除了异常处理的情况。文中加粗的文字相应的比较重要&#xff0c;需要多注意。当然文中会有错误&a…

串口通信

串口 一、并行通信和串行通信1、串行通信2、并行通信 二、同步通信和异步通信1、同步通信2、异步通信三、串口1、了解什么是串口2、串口的几个电平标准3、串口的通信原理波特率起始位、停止位数据位数据校验位 额外说明 一、并行通信和串行通信 1、串行通信 串行通信技术&…

使用USB Gadget框架让USB变成串口设备

1. 背景介绍 串口是一种经典且对软件工程师友好的通信方式&#xff0c;因为可以在直接使用echo进行通信&#xff0c;不需要驱动&#xff0c;非常的方便&#xff0c;但当使用串口时&#xff0c;往往需要用到杜邦线和usb2ttl设备&#xff0c;虽然软件上面方便了&#xff0c;但是…

RT-Thread串口设备驱动框架

转自&#xff1a;嵌入式系统学习记录 - 知乎 目录 1. 串口设备控制块 2. 注册串口设备rt_hw_serial_register 3. 串口设备操作方法 3.1 rt_serial_init 3.2 rt_serial_control 3.3 rt_serial_open 3.4 rt_serial_close 3.5 rt_serial_read 3.6 rt_serial_write 串口驱…

虚拟串口设备驱动

前面内容&#xff1a; 1 Linux驱动—内核模块基本使用 2 Linux驱动—内核模块参数&#xff0c;依赖(进一步讨论&#xff09; 3 字符设备驱动 虚拟串口设备驱动 虚拟串口设备虚拟串口设备驱动 先学习下虚拟串口设备是啥&#xff1f; 虚拟串口设备 在进一步实现字符设备驱动…

串口使用简介

1、 串口的作用 UART&#xff1a;通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;简称串口。 ①调试&#xff1a;移植u-boot、内核、应用程序时&#xff0c;主要使用串口查看打印信息 ②外接各种模块 2、串口参数 ①波特率&#xf…

多个USB转串口设备区分方法

概述 当计算机或者其他USB主机上使用多个USB转串口设备时&#xff0c;会遇到多个串口无法与具体的串口设备对应起来的问题&#xff0c;包括更换不同USB端口串口序号发生改变&#xff0c;多个设备USB插拔顺序不同导致串口序号改变等问题。 本文提出几种常见解决方式&#xff0…

串口相关

区分&#xff1a;串口&#xff0c;COM口&#xff0c;UART&#xff0c;USART https://blog.csdn.net/qq_26904271/article/details/79829363 串口通信 https://blog.csdn.net/zxh1592000/article/details/78656609 串口&#xff1a;传输一个字节&#xff08;8个位&#xff09;的…