使用HCS12微控制器的设计与应用.docx

上传人:b****6 文档编号:3280436 上传时间:2022-11-21 格式:DOCX 页数:68 大小:1.89MB
下载 相关 举报
使用HCS12微控制器的设计与应用.docx_第1页
第1页 / 共68页
使用HCS12微控制器的设计与应用.docx_第2页
第2页 / 共68页
使用HCS12微控制器的设计与应用.docx_第3页
第3页 / 共68页
使用HCS12微控制器的设计与应用.docx_第4页
第4页 / 共68页
使用HCS12微控制器的设计与应用.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

使用HCS12微控制器的设计与应用.docx

《使用HCS12微控制器的设计与应用.docx》由会员分享,可在线阅读,更多相关《使用HCS12微控制器的设计与应用.docx(68页珍藏版)》请在冰豆网上搜索。

使用HCS12微控制器的设计与应用.docx

使用HCS12微控制器的设计与应用

1.1.1嵌入式系统与单片机

嵌入式系统的由来(通用计算机系统、嵌入式计算机系统)

单片机的含义

MCU与嵌入式系统的关系

1.1.2MCU的发展简史

发展趋势

大容量、高性能化

小容量、低价格化

外围电路内装化

8位→16位→32位→64位

1.2.1与硬件相关的术语

封装(Package)

印刷电路板(PCB)

动态可读/写随机存储器(DRAM)

静态可读/写随机存储器(SRAM)

只读存储器(ROM)

Flash存储器(FlashMemory)

模拟量

开关量

1.2.2与通信相关的术语

并行通信

串行通信

串行外设接口(SPI)

集成电路互连总线I2C

通用串行总线USB

控制器局域网CAN

背景调试模式BDM

边界扫描测试协议JTAG

1.2.3与功能模块相关的术语

通用输入/输出GPIO

A/D与D/A

脉冲宽度调制器PWM

看门狗

液晶显示器LCD

发光二极管LED

键盘

1.2.4与嵌入式软件相关的术语

中断

中断服务程序

实时操作系统RTOS

µC/OS-II

临界区

1.3.1嵌入式产品的一般构成

1.3.2嵌入式产品的一般开发方法

1基本输入/输出分析

2选择MCU的基本方法

3选择评估系统并对与MCU相关的硬件进行初步评估

4设计并制作硬件系统

5进行硬件系统的模块测试

6软件系统设计

7系统测试

8进一步工作

1.4.1嵌入式系统的特点

资源受限

开发需要专用工具和特殊方法

要求较高可靠性和稳定性

有实时约束

通常极其关注成本

大多要求低功耗

专用性很强

技术含量高

具有很长生命周期

1.4.2嵌入式系统的学习建议

明确学习的目的

选择好入门的机型

必要的记忆

勤于实践

学习各种接口的原理

与时俱进,不断改进自己的学习方式

从底层抓起,一点一滴打好基础

2.1.1FreescaleHCS12系列MCU的命名规则

MC9S12Dх256BхххE

①②③④⑤⑥⑦⑧

①:

产品状态

②:

存储器类型标志

③:

CPU标志

④:

系列标志

⑤:

存储空间大小及版本

⑥:

工作温度范围标志

⑦:

封装标志

⑧:

无铅组装标志

2.1.2HCS12各子系列MCU简介

系列

B系列

C系列

A系列

D系列

E系列

GC系列

H系列

NE系列

Q系列

T系列

UF系列

相同点

工作电压一般为5V

不同点

ROM大小

RAM大小

EEPROM大小

Flash容量

I/O口数

串行借口

A/D转换器

2.1.1FreescaleHCS12系列MCU的命名规则

MC9S12Dх256BхххE

①②③④⑤⑥⑦⑧

①:

产品状态

②:

存储器类型标志

③:

CPU标志

④:

系列标志

⑤:

存储空间大小及版本

⑥:

工作温度范围标志

⑦:

封装标志

⑧:

无铅组装标志

2.1.2HCS12各子系列MCU简介

系列

B系列

C系列

A系列

D系列

E系列

GC系列

H系列

NE系列

Q系列

T系列

UF系列

相同点

工作电压一般为5V

不同点

ROM大小

RAM大小

EEPROM大小

Flash容量

I/O口数

串行借口

A/D转换器

2.3.1MCU性能概述

1.时钟和复位产生模块、存储器与封装形式

2.丰富的I/O接口

2.3.2运行模式

1.单片运行模式

2.扩展运行模式

2.3.3内部结构简图、引脚图及引脚功能

80引脚

112引脚

 

2.3.4MC9S12DG128MCU的最小系统设计

2.4MC9S12DG128的存储器映像

2.5.1I/O接口的基本概念

 

2.5.2A口、B口、E口和K口

数据方向寄存器

分别为DDRA、DDRB、DDRE、DDRK

0:

定义输入1:

定义输出

I/O寄存器

分别为PORTA、PORTB、PORTE、PORTK

输出时,0:

输出低电平1:

输出高电平

输入时,0:

外部输入低电平1:

外部输入高电平

上拉电阻控制寄存器

PUCR

四口共用

0:

没有内部上拉电阻1:

有内部上拉电阻

2.5.3H口、J口、M口、P口、S口和T口

1.端口的寄存器

数据方向寄存器

I/O寄存器

输入寄存器

低功耗驱动寄存器

0:

输出功耗正常1:

输出功耗为正常的1/6

上拉下拉使能寄存器

0:

禁用上拉或下拉电阻1:

允许上拉或下拉电阻

上拉下拉选择寄存器

0:

上拉1:

下拉

2.端口的复用功能

T口:

接收输入捕捉功能

S口:

SCI、SPI模块关联作为通信接口

M口:

与ByteFlight、BDLC、CAN、SPI模块关联作为通信接口

P口:

与PWM、SPI模块关联作为通信接口

H口:

与SPI模块关联作为通信接口

J口:

与CAN、IIC模块关联作为通信接口

2.5.4其他I/O口

A/D口:

作为AD转换模块的模拟量输入口和外界触发脉冲的输入口

也可以做为普通输入口

3.1CPU12基本组成

3.2寻址方式

1.内在寻址方式(INH)

2.立即寻址方式(IMM)

3.直接寻址方式(DIR)

4.扩展寻址方式(EXT)

5.相对变址寻址方式(REL)

6.变址寻址方式(IDX)

7.5位偏移量变址方式

8.9位偏移量变址方式

9.16位偏移量变址方式

10.16位间接变址方式

11.自增自减变址寻址方式

12.累加器偏移变址寻址方式

13.累加器D间接寻址

3.3指令系统

1算术运算(加、减、乘、除、加1、减1、……)

2逻辑运算(与、或、异或、……)

3位操作(位测试、置位、……)

4移位(算术/逻辑/循环左/右移、……)

5程序控制(转移、比较相等转移、……)

6模糊指令

7数据传送(取数、存数、进栈、出栈、……)

8其他指令

3.3.1数据传送类指令

取数指令

存数指令

传递指令

交换指令

MOVE指令

堆栈指令

3.3.2算术运算类指令

加、减法指令

自增、自减指令

比较指令

测试指令

逻辑运算指令

清零指令

取反/求补指令

乘/除法指令

最大/最小值指令

乘积累加指令

记忆标志位:

C—进/借位标志

V—溢出标志

H—加法半字节进位标志

N—正负标志位

Z—零标志位

3.3.3位操作类指令

位测试指令BITA、BITB

位置1指令BSET

位清零指令BCLR

3.3.4移位类指令

算术左移(ASL)

逻辑左移(LSL)

算术右移(ASR)

逻辑右移(LSR)

循环左移(ROL)

循环右移(ROR)

协助记忆:

算术:

Arithmetic

逻辑:

Logic

左:

Left

右:

Right

循环:

Rotate

3.3.5程序控制类指令

短转移指令(地址偏移量:

-128~+127)

长转移指令(地址偏移量:

-32768~+32767)

位条件转移指令(地址偏移量:

-128~+127)

BRCLR

BREST

循环控制指令

跳转指令

无条件转移JMP

绝对转移调用JSR

相对转移调用BSR

3.3.6模糊指令

MEM

REV

REVW

WAV

3.3.7其他指令

表插补指令

中断指令

变址操作指令

指针和变址计算指令

条件码指令

停止与等待模式指令

后台模式与空操作

3.4CPU12与CPU08的比较

3.5.1HCS12汇编源代码格式

基本概念

编译器

伪指令

语句元素

标号

操作码

操作数(常数、#、圆点)

注释

3.5.2MT-IDEforHCS12开发环境中的汇编伪指令

变量定义

A1:

.balign1

A2:

.balignw1

数字常数与字符串常数定义

常数赋值与文本替代符伪指令

.definePI=3.14

存储定位伪指令

文件包含伪指令

.include

3.5.3CodeWarriorforHCS12开发环境中的汇编伪指令

变量定义

LABEL1:

DS.B1

LABEL2:

DS.W1

数字常数与字符串常数定义

常数赋值与文本替代符伪指令

PI:

EQU3.14

存储定位伪指令

文件包含伪指令

INCLUDE

MT-IDEforHCS12集成开发环境

简称MT环境

Freescale公司

CodeWarriorforHCS12集成开发环境

简称CW环境

4.1.1MT-IDEforHCS12集成开发环境

4.1.2CodeWarriorforHCS12集成开发环境

4.2.1嵌入式系统工程文件组织

4.2.2列表文件(*.LIS或*.LST)

列表文件的行内容格式:

4.2.3目标代码文件(*.S19)

目标代码文件是以S记录(八种)格式表示的机器码文件

4.2.4与链接相关的地址信息文件

4.3.1小灯闪烁汇编工程在MT环境下的文件组织

1与芯片相关的程序文件

DG128ASM.h--定义芯片映像寄存器名

Vector.s--定义中断向量表

Isr.s--中断处理子程序

Start12.s--系统启动文件

MCUInit.h--芯片初始化头文件

MCUInit.s--芯片初始化文件

2硬件对象控制文件

LED.h–小灯控制引脚宏定义

包含小灯驱动所需头文件

小灯控制引脚宏定义

小灯驱动子程序声明

LED.s–小灯驱动子程序

定义子程序LEDInit:

初始化

定义子程序LED_L_A:

驱动小灯"亮","暗"

3通用程序文件

Includes.h–总头文件

工程中用到的头文件

有关常量命名

GeneralFun.s–通用子程序

定义子程序DelayX:

延时

4主程序文件

main.s–主程序

工程描述

包含总头文件

主程序

内部直接调用子程序

子程序编写规范(以LED.s为例)

4.3.2MT环境下第一个汇编工程的链接信息文件

链接信息文件linker.ld

链接有两种模式

内存直接模式

内存扩展模式

4.3.3MT环境下第一个汇编工程的执行过程

4.4.1小灯闪烁C工程在MT环境下的文件组织

4.4.2MT环境下第一个C工程的链接信息文件

链接信息文件linker.ld

内容与汇编链接信息相同

4.4.3MT环境下第一个C工程的执行过程

4.5.1小灯闪烁汇编工程在CW环境下的文件组织

4.5.2CW环境下第一个汇编工程中的链接信息文件

4.5.3CW环境下第一个汇编工程的执行过程

4.6.1小灯闪烁C工程在CW环境下的文件组织4.6.2CW环境下第一个C工程中的链接信息文件

4.6.3CW环境下第一个C工程的执行过程

4.6.1小灯闪烁C工程在CW环境下的文件组织4.6.2CW环境下第一个C工程中的链接信息文件

4.6.3CW环境下第一个C工程的执行过程

 映像寄存器名

C工程中调用汇编语句的格式

中断函数的声明

5.1.1基本概念

1.异步串行通信的格式(NRZ)

2.串行通信的波特率

定义:

每秒内传送的位数。

单位:

b/s或bps

常用:

1200bps、4800bps、9600bps……

3.奇偶校验

奇校验:

校验位为0或1,使得1的数目是奇数

偶校验:

校验位为0或1,使得1的数目是偶数

4.串行通信的传输方式

单工:

1根数据线

全双工:

2根数据线

半双工:

1根数据线

5.1.2RS-232C总线标准

1.采用负逻辑

逻辑“1”:

-15V~-3V

逻辑“0”:

+3V~+15V

2.传输距离≤30m,通信速率≤20Kbps

3.接口

9芯、25芯

地线、发送数据线、接收数据线

5.2.1SCI的外围硬件电路

5.2.2SCI的基本编程原理

SCI的主要功能是:

接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部;

发送时,把需要发送的一个字节的并行数据转换为单线输出。

5.3.1SCI波特率寄存器

 

根据波特率设置寄存器的公式:

BR=fBUS/(16×Bt)

举例:

总线频率fBUS=19.6608MHz,

定义波特率Bt=9600(针对SCI0)

SCI0BDL=0x80;//须先给低8位赋值

SCI0BDH=0x00;//再给高5位赋值

5.3.2SCI控制寄存器1

缩写:

SCI0CR1、SCI1CR1

位定义:

举例:

设置允许SCI、正常码输出、8位数据、无校验

SCI0CR1=Ox00;

5.3.3SCI控制寄存器2

缩写:

SCI0CR2、SCI1CR2

位定义:

举例:

设置允许发送、允许接收,查询方式收发

SCI0CR2=0x0C;

5.3.4SCI状态寄存器1

缩写:

SCI0SR1、SCI1SR1

位定义:

只读

常用:

D7=1:

可以发送数据;D7=0:

不可以发送数据,需等待

D5=1:

可以取出数据;D5=0:

不可以取出数据,需等待

5.3.5SCI状态寄存器2

缩写:

SCI0SR2、SCI1SR2

位定义:

只读

常用:

D0=1:

正在接收数据;

5.3.6SCI数据寄存器

缩写:

SCI0DRH、SCI0DRL、SCI1DRH、SCI1DRL

位定义:

5.4.1SCI初始化

 

5.4.2发送一个数据与接收一个数据

5.5.1串行通信子函数

SCI.h:

串行通信头文件

串行通信寄存器及标志位定义

串行通信相关函数声明

SCIInit.c:

串行口SCI0初始化函数

voidSCIInit(void)

SCI.c:

串行发送与接收通用子函数

voidSCISend1(INT8Uo)

voidSCISendN(INT8Un,INT8Uch[])

INT8USCIRe1(INT8U*p)

INT8USCIReN(INT8Un,INT8Uch[])

5.5.2查询方式收发测试工程

查询方式收发测试工程主函数文件main.c

中断方式测试工程辅助工具

中断方式HCS12C语言主程序

串行中断子函数声明(isr.h)

#ifndefISR_H//避免重复定义

#defineISR_H

voidISR_Receive(void);//接收中断函数声明

void__attribute__((interrupt))ISR_Empty(void);

void_start(void);//复位函数(StartCode.s中定义,特殊)

//芯片开关总中断的宏定义

#defineENABLE_INTERRUPTS__asm__("cli")//开中断

#defineDISABLE_INTERRUPTS__asm__("sei")//关中断

//开关各模块中断的宏定义

//开放或禁止SCI0的接收中断的宏定义

#defineEnableSCIReIntSCI0CR2|=0x20//开放SCI0接收中断

#defineDisableSCIReIntSCI0CR2&=0xDF//禁止SCI0接收中断

#endif

串行中断函数(isr.c)

//ISR_Receive:

SCI0接收中断函数

void__attribute__((interrupt))ISR_Receive(void)

{

INT8Ui;

INT8USerialBuff[1];//存放接收数据的数组

DISABLE_INTERRUPTS;//关总中断

i=SCIReN(1,SerialBuff);//等待接收1个数据

if(i==0)SCISendN(1,SerialBuff);//发送接到的数据

ENABLE_INTERRUPTS;//开总中断

}

//ISR_Empty:

空中断函数定义

void__attribute__((interrupt))ISR_Empty(void)

{

}

5.6.1将串口端用作电源

5.6.2握手

5.6.3唤醒功能

空闲线唤醒

地址标志唤醒

6.1.1键盘模型及接口

键盘模型(通、断)

 

键盘接口:

独立式键盘、矩阵式键盘

6.1.2键盘的基本问题

键的识别

抖动问题

重键问题

键值计算方法(以符号“1”为例)

6.2.1键盘函数定义头函数(KB.h)

//键盘扫描识别寄存器及标志位定义

#defineKB_PPTH//键盘接在PTH口上

#defineKB_DDDRH//相应的方向寄存器

#defineKB_PEPERH//相应的上拉下拉电阻允许寄存器

#defineKB_PSPPSH//相应的极性选择寄存器

#defineKB_IEPIEH//相应的中断允许寄存器

#defineKB_IFPIFH//相应的中断标志寄存器

///键盘扫描识别函数声明

voidKB_Init(void);//键盘初始化

INT8UKB_Scan1(void);//扫描读取键值

INT8UKB_Def(INT8UKB_valve);//键值转为定义值

INT8UKB_ScanN(INT8UKB_count);//多次扫描键盘

6.2.2键盘函数定义(KB.c)

键盘初始化的函数

voidKB_Init(void)

扫描一次读取键值的函数

INT8UKB_Scan1(void)

扫描KB_count次读取键值的函数

INT8UKB_ScanN(INT8UKB_count)

将键值KB_valve转为定义值的函数

INT8UKB_Def(INT8UKB_valve)

6.2.3测试工程的主函数(main.c)

6.3.1扫描法LED显示编程原理

8段数码管由8个发光二极管(LED)组成

需有8位(即1个字节)数据来控制各个位段的亮灭

6.3.1扫描法LED显示编程原理

6.3.2接口实例

6.3.3数码管HCS12C语言实例

1.LED函数定义头文件(LED.h)

2.LED函数定义文件(LED.c)

4连排LED初始化函数

voidLEDInit(void)

在4连排LED上显示以Buf为首地址的4个数据

voidLEDShow(INT8U*Buf)

在第i个LED上显示数字c

voidLEDShow1(INT8Ui,INT8Uc)

 

 

3.测试工程的主函数(main.c)

第1步:

禁止总中断

第2步:

芯片初始化

第3步:

SCI模块初始化、LED控制引脚初始化

第4步:

LED初始显示“0123”

第5步:

开放SCI接收中断

第6步:

开放总中断

第7步:

若正确收到数据,刷新显示缓冲区

第8步:

转第7步

6.4.1LCD的特点

低电压微功耗

平板型结构

使用寿命长

被动显示

显示信息量大且易于彩色化

无电磁辐射

6.4.2LCD的分类

按电光效应分类

电场效应类

电流效应类

电热写入效应类

热效应类

按显示内容分类

字段型

点阵字符型

点阵图形型

按LCD的采光方式分类

带背光源

不带背光源

6.5.1点阵字符型液晶显示模块的基本特点

字符群:

5×8或5×11点阵块

主控制电路:

HD44780

内部具有字符发生器

自定义字符RAM

数据显示RAM

标准接口特性

模块结构紧凑、轻巧、装配容易。

单+5V电源供电

低功耗、高可靠性。

6.5.2HD44780的引脚与时序---引脚

6.5.3HD44780的编程结构

1.指令寄存器(IR)

2.数据寄存器(DR)

3.忙标志(BF)

4.地址计数器(AC)

5.显示数据寄存器(DDRAM)

6.字符发生器ROM(CGROM)

7.字符发生器RAM(CGRAM)

6.5.4HD44780的指令集

 

点阵字符型LCD编程

6.6.1LCD函数定义头文件(LCD.h)

液晶显示寄存器及标志位定义

液晶显示相关函数声明

6.6.2LCD函数定义(LCD.c)

初始化LCD函数

voidLCDInit(void)

HD44780显示屏显示str所指向的32个数据

voidLCDShow(INT8Ustr[])

执行给定的cmd命令,且延时

voidLCD_Command(unsignedcharcmd)

6.6.3测试工程的主函数(main.c)

第1步:

定义初始显示缓存并赋初值

第2步:

禁止总中断

第3步:

芯片初始化

第4步:

串行口初始化、LCD初始化

第5步:

开放总中断

第6步:

LCD显示初始化

第7步:

若正确收到32个数据,则显示到LCD

第8步:

转第7步

7.1.1功能描述

7.1.2SPI模块的I/O引脚

从机选择引脚

主出从入引脚MOSI

主入从出引脚MISO

SPI串行时钟引脚SPSCK

7.2.1SPI模块的寄存器

 

7.2.2SPI编程基本方法

SPI初始化

第1步:

写控制字到SPICR,确定是否允许SPI接收中断、SPI的工作方式、时钟极性、时钟相位、是否允许SPI等。

第2步:

写控制字到SPISCR,确定SPI的波特率。

发送与接

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1