飞思卡尔单片机应用实验指导书(2)

2020-02-20 21:11

被发送字符的ASCII码。

5.编制一个中断方式通信程序。 编程要求同上一条。

五.编程提示

1.按照结构要求写好编程代码和注释。

2.计算波特率,SCInInit(SCI初始化子程序)设置SCI比特率寄存器(SCInBDH,SCInBDL),设置允许SCI、正常码输出、8位数据、无校验,即设置SCI控制寄存器1(SCIxC1)相应位,设置是否允许发送与接收、是中断接收还是查询接收,即设置SCI控制寄存器2(SCIxC2)相应位。

3.查询方式通信程序的主程序主体是一个死循环,循环体中是不断检测SCI是否发送完毕,即检测SCI状态寄存器1(SCIxS1)第七位是否为1,为1则将字符的ASCII码输出到接在PTB口的LED上,并延时一会。

4.中断方式通信程序的主程序也主体是一个死循环,但该循环体是一个空循环体,所有接收和发送数据程序代码放在中断程序中,这里没有检测代码,数据开始发送和接收的条件就是中断的条件。

六.实验报告要求

1.小结AW60串行通信(SCI)的原理及编程,并画出其流程图和程序代码与硬件接线图。 2.小结中断方式和查询方式的编程方法,并画出其流程图和程序代码与硬件接线图。 3.回答下列问题

(1)串行SCI通信有哪些中断?各在什么情况下发生,作用是什么? (2)如何知道串行口TX发送了信号?

提示:方法一,利用万用表在TX端发送0或者255持续0.5秒钟时的电压值。 方法二,在TX端发送0或255持续0.5秒钟的波形时的小灯变化。

七.参考例程:

void main(void) {

unsigned char SerialBuff[]=\初始化存放接收数据的数组 //1 关总中断

DisableInterrupts; //禁止总中断 //2 芯片初始化 MCUInit();

//3 模块初始化

SCIInit(); //串行口初始化 //4 开放中断

EnableInterrupts; //开放总中断

SCISendN(13,SerialBuff); //串口发送“Hello World!”

//5 主循环 while (1)

{ if

((SCI1S1&SCI1S1_RDRF_MASK)!=0) { PTBD=SCI1D ;

if((SCI1S1&SCI1S1_TDRE_MASK)!=0) SCI1D=PTBD; } else

PTBD=0x00; } }

void MCUInit(void) {

SOPT = 0b01100000; //$70 System Options Register(write once) ICGC2 = 0b00110000; //$30 internal clock generation 2

ICGC1 = 0b01111000; //$78 internal clock generation 1 //等待FLL稳定

while(!ICGS1_LOCK); PTBDD=0xff ; PTBD=0xff ; }

void SCIInit() {

unsigned int ubgs,baud=9600; unsigned char sysclk=20;

//1.计算波特率并设置:ubgs = fsys/(波特率*16)(其中fsys=sysclk*1000000)

ubgs = sysclk*(10000/(baud/100))/16; //理解参考上一行,此处便于CPU运算 SCI1BDH= (unsigned char)((ubgs & 0xFF00) >> 8); SCI1BDL= (unsigned char)(ubgs & 0x00FF);

//无校验,正常模式(开始信号 + 8位数据(先发最低位) + 停止信号) SCI1C1= 0;

//允许发送,允许接收,查询方式收发 SCI1C2= (0

| SCI1C2_TE_MASK | SCI1C2_RE_MASK ); }

void SCISend1(unsigned char ch) {

while(!(SCI1S1 & SCI1S1_TDRE_MASK));//判断发送缓冲区是否为空 SCI1D = ch; }

void SCISendN(unsigned char n, unsigned char ch[]) {

unsigned i;

for (i = 0; i < n; i++) SCISend1(ch[i]); }

unsigned char SCIRe1(unsigned char *p) {

unsigned int k; unsigned char i;

for (k = 0; k < 0x0b; k++)//有时间限制

if((SCI1S1 & SCI1S1_RDRF_MASK) != 0)//判断接收缓冲区是否满 {

i = SCI1D; *p = 0x00; break; }

if (k >= 0x0b) //接收失败 { i = 0xff; *p = 0x01; }

return i; }

unsigned char SCIReN(unsigned n,unsigned char ch[]) {

unsigned char m;

unsigned char fp; //接收标志 m = 0;

while (m < n) {

ch[m] = SCIRe1(&fp); if (fp == 1) {

return 1; //接收失败 } m++; }

return 0; //接收成功 }

实验三 键盘中断及LED数码块实验

一、实验目的:

1.熟练运用嵌入式开发系统环境、C语言及调试方式。 2.复习串行通信接口(SCI)的内容。 3.加强键盘中断基本原理及编程原理的理解。

4.理解“行扫描”法的原理并能进行键值识别和键值编码。 5.理解键盘接线原理图(如图3-1)。

6.理解LED数码块的显示原理,初步掌握LED数码块显示编程方法。

实验箱提供一个16键键盘,用于键盘中断信号的输入。系统提供两种接线方式: ①当将键盘接入上一排插孔时为固定接线,键盘接线原理图如图3-1所示。

②当将键盘接入下一排插孔时为手动接线,连线的位置在键盘的左边。

实验箱提供四个LED数码块,PB0~PB7为段码接口,PTD0、PTD1、PTD4、PTD5为位码控制接口。

MCU内部上拉电阻 +5V 行线m1 m2 m3 m4 列线 n1 n2 n3 n4 PTD0 1K CS0 7 1 2 3 4 5 6 7 a PTG0 PTG1 PTG2 PTG3 PTG4 PTD2 PTD3 PTD7

a f CS1 8 9 10 PTB0 PTB5 1K 1K CS2 11 PTD1 PTD2 b 12 PTB1 a f g e d a b c h 1 a b f g c h 4 5 8 b f g e d 2 3 b c d 6 CS3 1K f g h e d e c h e d h c g 键盘及LED数码块原理图 PTB4 PTB3 PTB7 PTB2 PTB6 PTD3

二、实验要求:

1.仔细阅读本实验指导书。

2.复习有关的键盘中断和串行通信接口(SCI)的章节。 3.熟悉AW60键盘模块的工作方法及编程。

4.根据实验内容要求编写好程序,为实验做充分地准备。

三.实验设备及其连接

1.PC机

一台

2.飞思卡尔嵌入式实验开发系统 一台 3.串行通信线

一根

四.实验内容

1.理解并运行按键扫描及键值键码发送样例程序(将按键的键值及键码从串行口发送到PC机端的串口工具软件);

2.编制一个中断方式的16键键盘程序,使用“行扫描”法识别按键;

采用键盘中断方式。PTD7,3,2及PTG4接键盘4根列线,PTG3-0接键盘4根行线。要求按下的一个键的键值和键面定义值(键的ASCII码值)通过串口在PC方软件界面显示,同时用小灯显示按键的键面定义值(键的ASCII码值),PTB7-PTB0口与小灯相连;

3.理解并运行LED数码块样例程序(在LED数码块上显示“2011”);

4.参考按键及LED数码块样例程序,设计一个按键显示程序。将按键的键码在LED数码块上显示。

7段LED显示字型码 显示字符 字型码 共阴极 共阳极 h g 0 0 1 1 1 1 1 0 1 1 1 1 0 1 f 1 0 0 0 1 1 1 0 1 1 1 1 1 0 e 1 0 1 0 0 0 1 0 1 0 1 1 1 1 d 1 0 1 1 0 1 1 0 1 1 0 1 1 1 c 1 1 0 1 1 1 1 1 1 1 1 1 0 1 b 1 1 1 1 1 0 0 1 1 1 1 0 0 1 a 1 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 2 3 4 5 6 7 8 9 A B C D 3F 06 5B 4F 66 6D 7D 07 7F 6F 77 7C 39 5E C0 F9 A4 B0 99 92 82 F8 80 90 88 83 C6 A1


飞思卡尔单片机应用实验指导书(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:广东省高级人民法院 广东省人民检察院 广东省公安厅印发关于核实

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: