51单片机通过串口打印调试信息。

1、实验目的
有时候单片机程序运行的时候我们不知道当前程序行某个变量的数据是多少,我们想像学习C语言的时候,打印出来信息,比如变量的值等等。
这里就是起到这个调试作用。
但是,要注意变量范围。是全局变量,还是局部变量等。
如果用模块化编程,串口在其他文件中,还需要进行代码的引用等。

2、实验原理和步骤

.2.1原理
利用stc89C52的单片机的串口发送数据到电脑的串口助手中,打印出来信息;
这里如果换没学到串口的知识,那么可以跳过,或者简单学习下串口的知识。

直接调用一个函数就行,这个函数是利用51单片机的定时器,产生串口的波特率;
51单片机的定时器一般用定时器1或者定时器2

如果你项目中用了定时器1,那就不能定时器1产生波特率了。根据实际情况而定。

我这里假如你其他地方没用用到定时器1,那么我就用定时器1产生9600的波特率。

什么是波特率,就是A和B通信的速度。单片机和电脑进行通信。所以要约定一些东西。这里约定了对话的速度,等等。

2.2步骤
一、。接线;
这里就是你下载的线和电脑接上就行了。
一般51单片机就是通过串口下载程序的。
接上线之后。
打开stc-ISP下载软件。看到串口号。
在这里插入图片描述
二、编程。
在编程的时候。
这里用了51单片机的定时器1做为波特率发生器。所以其他地方不能用定时器1
如果其他地方用定时器1.那么就改成定时器2作为波特率产生器,也一样。波特率9600

void UART_init(void)
{
   
   		  

 	SCON=0x50;	    //串口选择模式1, 8-bit UART, 使能接收    
  TMOD|=0x20;     //用定时器1设置波特率
  TH1=0xFD;     
  TR1=1;           
	TI=1; 			//开启串口中断
} 

如果你用定时器2产生波特率,将上面的代码改为

#define FOSC 11059200L      //System frequency
#define BAUD 9600       //UART baudrate
//定时器2作为波特率发生器。调试的时候用。
void UART_init(void)
{
   
   		  
  TL2 = RCAP2L=(65536-(FOSC/32/BAUD));//9600波特率对应 FFD9,低位为D9(65536-26)%256
   TH2 = RCAP2H=(65536-(FOSC/32/BAUD)) >> 8;//高位为FF(65536-26)/256
   T2CON=0x34;//RCLK、TCLK、TR2置1
   SCON=0x50;//串口工作模式1,接收使能
   TI=1;
   
} 

主函数调用串口初始化函数。
在头文件上面。添加一个

#include <stdio.h> 	       // 为使用KEIL自带的库函数printf而加入

如果你按照C51软件的时候,不对。出错,新建一个stdio.h文件,然后添加这个文件stdio到工程目录中,

stdio.h

/*--------------------------------------------------------------------------
STDIO.H

Prototypes for standard I/O functions.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __STDIO_H__
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值