实验六 AD转换、SCI串行通信

2024年重庆大学通信工程大二课程:《MCU原理及应用——基于恩智浦S12X的嵌入式系统开发》实验课程记录。(错误在所难免,请多斧正!🙏)

目录


资源下载和实验环境

见下前言注意事项

实验二 并行I/O接口、IRQ中断-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_73918454/article/details/139250471?spm=1001.2014.3001.5501


一、实验目的

掌握C语言综合编程方法,掌握A/D转换、SCI串行通信、中断等功能部件的使用规则和应用方法,熟悉综合程序设计方法和PC软件工具。

二、实验内容

2.1 A/D转换

A/D转换,8位精度,转换结果右对齐,将转换结果通过B口LED灯(开发板)表达。

检测对象为开发板上圆盘电位器RV1分压得到的模拟量。MCU的PAD00/AN00已默认跳接至该模拟电平输入,其电压范围0~5V(逆时针旋转电压变大)。通过旋转电位器RV1进行分压调节以观察程序运行效果,此时B口LED灯的状态应是A/D转换的二进制表示。

在上述实验成功的基础上,检测对象改为为开发板上光敏器件RZ1经过放大得到的模拟量,MCU的PAD01/AN01已默认跳接至该模拟电平输入,其电压范围0~5V。改变光敏器件RZ1的光照,以观察程序运行情况。(教材P189)

代码实现

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

void main(void) {
  /* put your own code here */
  DisableInterrupts;
  
  DDRB = 0xFF;
  PORTB = 0xFF;
  
  ATD0CTL1 = 0x00;
  ATD0CTL2 = 0x40;
  ATD0CTL3 = 0x08;
  ATD0CTL4 = 0xA3;
  ATD0DIEN = 0x00;
  ATD0CTL5 = 0x21; 
  //AN00(RV1):0x00

	EnableInterrupts;

  for(;;) {
    while((ATD0STAT0&0x80)!=0x80);
    PORTB = ~ATD0DR0H;
    
  } /* loop forever */
  /* please make sure that you never leave main */
}

 硬件显示

实验六 2.1 AD转换光敏

2.2 SCI串行通信,PC机连接

SCI0双向,8位,9600bps,无校验位。MCU平时处于查询等待状态,MCU的SCI0串行通信TTL电平收发线已通过开发板上的SCI0-RS232/TTL串行通信接口转换成PC机的USB接口线,PC机驱动安装后即会有一个虚拟串口设备(如COM4、COM5…)。

PC机上直接使用【串口调试】工具软件选择虚拟串口、进行发送数据或接收数据显示。当MCU每收到PC主机发来的Hex数据88(十六进制)命令后,就将本地原始某数据加1后上传给PC主机”串口调试”工具软件Hex显示。

预备软件:USB转RS232串口(CH340)驱动安装;PC机端串口调试助手。

硬件链接:将USB电缆一端接开发板P1- DB9的SCI0_RS232串口插座,另一端接PC机USB接口。(即蓝、白USB线都要接)

通信 Communication】即MCU与外设或其它器件进行数据交换。通信主要方式有并行通信和串行通信。

串行通信 Serial Communication Interface】逐位顺序传输。也称通用异步收发器(Universal Asynchronous Receiver/Transmitter

代码实现

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */


void main(void) {
  /* put your own code here */
  byte txdata=0,rxdata=0;
  
  SCI0BD=52;
  SCI0CR1=0x00;
  SCI0CR2=0x0C;        
  while((SCI0SR1&0x80)!=0x80);
  SCI0DRL=0x66;
  
	EnableInterrupts;


  for(;;) {
    _FEED_COP(); /* feeds the dog */
    while((SCI0SR1&0x20)!=0x20);
    rxdata=SCI0DRL;
    if(rxdata==0x88){
      txdata++;
      while((SCI0SR1&0x80)!=0x80);
      SCI0DRL=txdata;
      rxdata=0;
    }
  } /* loop forever */
  /* please make sure that you never leave main */
}

不足

上述程序SCI串行数据接受是采用查询方式进行。在高级复杂的应用中,CPU往往有多种任务要执行,此时若SCI没有接收到外来的串行数据,CPU会一直处于等待查询的状态,无法进行其他控制处理,浪费CPU的资源。

 故应该将SCI串行接受安排为中断响应方式,即 使能接收满中断,在中断服务程序中进行数据接收和相应处理。(见 2.3 改进2.2

软件显示

2.3 改进2.2

上面实验内容2 改为中断方式检测PC主机的命令。


总结

及时完成实验!不要拖延

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qiming_Peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值