嵌入式系统-使用HCS12微控制器的设计与应用_第1页
嵌入式系统-使用HCS12微控制器的设计与应用_第2页
嵌入式系统-使用HCS12微控制器的设计与应用_第3页
嵌入式系统-使用HCS12微控制器的设计与应用_第4页
嵌入式系统-使用HCS12微控制器的设计与应用_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统与单片机

嵌入式系统的由来〔通用计算机系统、嵌入式计算机系统〕

单片机的含义

MCU与嵌入式系统的关系MCU的开展简史

开展趋势

大容量、高性能化

小容量、低价格化

外围电路内装化

8位→16位→32位→64位与硬件相关的术语封装(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根本输入/输出分析

2选择MCU的根本方法

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

4设计并制作硬件系统

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

6软件系统设计

7系统测试

8进一步工作嵌入式系统的特点

资源受限

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

要求较高可靠性和稳定性

有实时约束

通常极其关注本钱

大多要求低功耗

专用性很强

技术含量高

具有很长生命周期

1.4.2嵌入式系统的学习建议

明确学习的目的

选择好入门的机型

必要的记忆

勤于实践

学习各种接口的原理

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

从底层抓起,一点一滴打好根底FreescaleHCS12系列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转换器FreescaleHCS12系列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转换器MCU性能概述

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

2.丰富的I/O接口

2.3.2运行模式

1.单片运行模式

2.扩展运行模式

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

112引脚MC9S12DG128MCU的最小系统设计2.4MC9S12DG128的存储器映像I/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口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其他指令

数据传送类指令

取数指令

存数指令

传递指令

交换指令

MOVE指令

堆栈指令算术运算类指令

加、减法指令

自增、自减指令

比拟指令

测试指令

逻辑运算指令

清零指令

取反/求补指令

乘/除法指令

最大/最小值指令

乘积累加指令

记忆标志位:

C—进/借位标志

V—溢出标志

H—加法半字节进位标志

N—正负标志位

Z—零标志位

3.3.3位操作类指令位测试指令BITA、BITB

位置1指令BSET

位清零指令BCLR移位类指令

算术左移〔ASL〕

逻辑左移〔LSL〕

算术右移〔ASR〕

逻辑右移〔LSR〕

循环左移〔ROL〕

循环右移〔ROR〕

协助记忆:

算术:Arithmetic

逻辑:Logic

左:Left

右:Right

循环:Rotate程序控制类指令

短转移指令〔地址偏移量:-128~+127〕

长转移指令〔地址偏移量:-32768~+32767〕

位条件转移指令〔地址偏移量:-128~+127〕

BRCLR

BREST

循环控制指令

跳转指令

无条件转移JMP

绝对转移调用JSR

相对转移调用BSR

3.3.6模糊指令

MEM

REV

REVW

WAV

3.3.7其他指令

表插补指令

中断指令

变址操作指令

指针和变址计算指令

条件码指令

停止与等待模式指令

后台模式与空操作3.4CPU12与CPU08的比拟HCS12汇编源代码格式

根本概念

编译器

伪指令

语句元素

标号

操作码

操作数〔常数、#、圆点〕

注释MT-IDEforHCS12开发环境中的汇编伪指令变量定义

A1:.balign1

A2:.balignw1

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

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

.definePI=3.14

存储定位伪指令

文件包含伪指令

.include<LED.h>

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

变量定义

LABEL1:DS.B1

LABEL2:DS.W1

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

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

PI:EQU3.14

存储定位伪指令

文件包含伪指令

INCLUDE<LED.h>MT-IDEforHCS12集成开发环境

简称MT环境

Freescale公司

CodeWarriorforHCS12集成开发环境

简称CW环境

MT-IDEforHCS12集成开发环境CodeWarriorforHCS12集成开发环境嵌入式系统工程文件组织列表文件(*.LIS或*.LST)

列表文件的行内容格式:目标代码文件(*.S19)

目标代码文件是以S记录〔八种〕格式表示的机器码文件与链接相关的地址信息文件小灯闪烁汇编工程在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为例〕MT环境下第一个汇编工程的链接信息文件链接信息文件linker.ld

链接有两种模式

内存直接模式

内存扩展模式

4.3.3MT环境下第一个汇编工程的执行过程小灯闪烁C工程在MT环境下的文件组织MT环境下第一个C工程的链接信息文件

链接信息文件linker.ld

内容与汇编链接信息相同

4.4.3MT环境下第一个C工程的执行过程小灯闪烁汇编工程在CW环境下的文件组织CW环境下第一个汇编工程中的链接信息文件CW环境下第一个汇编工程的执行过程小灯闪烁C工程在CW环境下的文件组织4.6.2CW环境下第一个C工程中的链接信息文件CW环境下第一个C工程的执行过程小灯闪烁C工程在CW环境下的文件组织4.6.2CW环境下第一个C工程中的链接信息文件CW环境下第一个C工程的执行过程

映像存放器名

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

中断函数的声明根本概念

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

2.串行通信的波特率

定义:每秒内传送的位数。

单位:b/s或bps

常用:1200bps、4800bps、9600bps……

3.奇偶校验

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

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

4.串行通信的传输方式

单工:1根数据线

全双工:2根数据线

半双工:1根数据线

RS-232C总线标准

1.采用负逻辑

逻辑“1”:-15V~-3V

逻辑“0”:+3V~+15V

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

3.接口

9芯、25芯

地线、发送数据线、接收数据线SCI的外围硬件电路SCI的根本编程原理

SCI的主要功能是:

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

发送时,把需要发送的一个字节的并行数据转换为单线输出。SCI波特率存放器

根据波特率设置存放器的公式:BR=fBUS/(16×Bt)

举例:总线频率fBUS=19.6608MHz,

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

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

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

SCI控制存放器1

缩写:SCI0CR1、SCI1CR1

位定义:

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

SCI0CR1=Ox00;

SCI控制存放器2

缩写:SCI0CR2、SCI1CR2

位定义:

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

SCI0CR2=0x0C;

SCI状态存放器1

缩写:SCI0SR1、SCI1SR1

位定义:只读

常用:

D7=1:可以发送数据;D7=0:不可以发送数据,需等待

D5=1:可以取出数据;D5=0:不可以取出数据,需等待

SCI状态存放器2

缩写:SCI0SR2、SCI1SR2

位定义:只读常用:

D0=1:正在接收数据;

SCI数据存放器

缩写:SCI0DRH、SCI0DRL、SCI1DRH、SCI1DRL

位定义:SCI初始化发送一个数据与接收一个数据串行通信子函数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.2握手5.6.3唤醒功能

空闲线唤醒

地址标志唤醒键盘模型及接口

键盘模型(通、断)

键盘接口:独立式键盘、矩阵式键盘键盘的根本问题

键的识别

抖动问题

重键问题键值计算方法〔以符号“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)扫描法LED显示编程原理8段数码管由8个发光二极管〔LED〕组成

需有8位(即1个字节)数据来控制各个位段的亮灭扫描法LED显示编程原理接口实例数码管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步LCD的特点

低电压微功耗

平板型结构

使用寿命长

被动显示

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

无电磁辐射

6.4.2LCD的分类

按电光效应分类

电场效应类

电流效应类

电热写入效应类

热效应类

按显示内容分类

字段型

点阵字符型

点阵图形型

按LCD的采光方式分类

带背光源

不带背光源点阵字符型液晶显示模块的根本特点

字符群:5×8或5×11点阵块

主控制电路:HD44780

内部具有字符发生器

自定义字符RAM

数据显示RAM

标准接口特性

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

单+5V电源供电

低功耗、高可靠性。

6.5.2HD44780的引脚与时序引脚HD44780的编程结构

1.指令存放器(IR)

2.数据存放器(DR)

3.忙标志(BF)

4.地址计数器(AC)

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

6.字符发生器ROM(CGROM)

7.字符发生器RAM(CGRAM)

6.5.4HD44780的指令集点阵字符型LCD编程LCD函数定义头文件(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步功能描述SPI模块的I/O引脚从机选择引脚

主出从入引脚MOSI

主入从出引脚MISO

SPI串行时钟引脚SPSCKSPI模块的存放器SPI编程根本方法

SPI初始化

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

第2步:写控制字到SPISCR,确定SPI的波特率。

发送与接收1字节数据

通过SPI发送1字节数据

voidSPISend1(INT8USendData)

通过SPI接收1字节数据

INT8USPIRev1(void)SPI接口对一些扩展芯片如AD采集芯片TLC2543等应用比拟广泛。

TLC2543与具有SPI或相同接口能力的MCU可以直接连接.

对于没有SPI接口的MCU可以通过软件编程合成SPI操作。IIC总线特点

二线制

支持多主控

位速率100kbit/s~3.4Mbit/s。

连接到相同总线的IC数量

7.4.2IIC总线标准的开展历史

1992年

1998年

2001年

7.4.3IIC总线的相关术语

主机(主控器)

从机(被控器)

地址

发送器

接收器

SDA(SerialDAta)

SCL(SerialCLock)IIC寻址约定地址总线上数据的有效性总线上的信号IIC总线寻址约定

起始信号后的第一个字节为寻址字节

寻址字节由被控器的七位地址位和一位方向位组成

任意两个从机的地址都不相同

7.5.5主机向从机读写1个字节数据的过程DG128芯片IIC的模块

允许多主机模式,符合IIC总线协议;

可软件编程选择256个串行时钟频率;

软件编程实现ACK信号;

位与位之间的中断传输方式;

仲裁丧失中断的同时,自动从主机模式切换到从机模式;

具有从地址识别中断;

起停信号的产生和检测,并可以重复产生开始信号;

信号的产生和检测;

总线繁忙检测。

7.6.2IIC模块存放器介绍IIC模块编程

IIC模块初始化函数

voidIICInit(void)

接收与发送1字节数据

接收1字节数据的函数

INT8UIICread1(INT8UDeviceAddr,INT8UAccessAddr,INT8U*Data)

发送1字节数据的函数

INT8UIICwrite1(INT8UDeviceAddr,INT8UAccessAddr,INT8UData)

接收与发送N字节数据

接收N字节数据的函数

INT8UIICreadN(INT8UDeviceAddr,INT8UAccessAddr,INT8UData[],INT8UN)

发送N字节数据的函数

INT8UIICwriteN(INT8UDeviceAddr,INT8UAccessAddr,INT8UData[],INT8UN)仲裁程序时钟同步握手时钟周期延长8.1.1A

1.采样精度

2.采样速率

3.滤波

4.物理量回归

8.1.2A/D转换器

积分型A/D转换器

逐次逼近型A/D转换器

8.1.3D/A转换D/A转换器的转换精度

分辨率

转换误差

D/A转换器的转换速度

建立时间tset

转换速率SR

8.1.4D/A转换器DG128内部A/D转换模块存放器

A/D转换控制存放器2

A/D转换控制存放器3

A/D转换控制存放器4

A/D转换控制存放器5

A/D转换状态存放器0

A/D转换测试存放器1

A/D转换状态存放器1

A/D转换输入使能存放器

A/D转换端口数据存放器

A/D转换结果存放器

8.2.2A/D转换模块的根本编程方法

1.A/D转换初始化

ATDCTL2=0b11000000;

//ATDCTL2.ADPU=1为翻开转换电源开关

//ATDCTL2.AFFC=1为A/D转换CCF自动清0位

ATDCTL3=0b00001011;

//ATDCTL3.S1C=1表示序列长度为1

//ATDCTL3.FIFO=0为非FIFO模式

//ATDCTL3.FRZ0~FRZ1=11表示立刻进入冻结模式

ATDCTL4=0b00000111;

//ATDCTL4.PRS4~PRS0=00111表示总线频率16分频

ATDCTL4&=0b01111111;

//ATDCTL4.SRES8=0表示10位转换精度

2.启动A/D转换

ATDCTL5=0b00100000;

//ATDCTL5.DJM=0,结果存放器数据采用左调整方式

//ATDCTL5.SCAN=1,连续转换序列

//ATDCTL5.CC~CA=000,启动0通道转换

3.获A/D转换结果

while(1)

//判断ATDSTAT0的第7位是否为1

if((ATDSTAT0&(1<<SCFBit))!=0)

//从A/D数据存放器0中读数据

{temp=ATDDR0;//10-bit数据

//对数据调整,使低十位有效

temp=(temp>>6);

break;}

returntemp;//返回10-bit的转换结果8.3.1A/D转换C语言头函数〔ADC.h〕

//AD转换存放器及标志位定义

#defineSCFBit7//转换完成标志位

//串行通信相关函数声明

//A/D转换初始化

voidADCInit(void);

//1路10位A/D转换

INT16UADCvalue(INT8Uchannel);

//1路10位A/D转换(中值滤波)

INT16UADCmid(INT8Uchannel);

//1路10位A/D转换(平均值滤波)

INT16UADCave(INT8Un,INT8Uchannel);

8.3.2A/D转换的C语言子函数〔ADC.c〕

A/D转换初始化

voidADCInit(void)

1路10位A/D转换函数

INT16UADCvalue(INT8Uchannel)

1路A/D转换函数(中值滤波)

INT16UADCmid(INT8Uchannel)

1路A/D转换函数(均值滤波)

INT16UADCave(INT8Un,INT8Uchannel)

8.3.3A/D转换测试实例主函数〔main.c〕8.4.1A/D芯片TLC2543概述SPI模块与TLC2543的接口扩展

扩展电路设计

编程方法

SPI头函数〔SPI.h〕

SPI通信存放器及标志位定义

SPI通信相关函数声明

TLC2543驱动函数〔TLC2543_Driver.c〕

1路AD转换函数

INT16UTLC2543(INT16Ucs,INT8Uchannel)

n路AD均值滤波函数

voidADCP(INT8Un,INT8Ucs,INT8Uchannel,INT16U*Values)

应用举例:利用上述子程序实现n路A/D数据的采集,并进行平均值滤波。每一路取n次求平均。

voidADCP(INT8Un,INT8Ucs,INT8Uchannel,INT16U*Values)

n:均值滤波次数

cs:片数

Channel:每片的通道数

Values:AD平均值DA芯片TLV5608概述引脚说明

TLV5608的控制存放器

控制存放器0(CTRL0)

控制存放器1(CTRL1)

TLV5608工作原理SPI模块与TLV5608的接口实现扩展DA的程序实现

D/A转换中的SPI初始化

voidDA_SPIInit(void)

D/A转换程序

voidDAC(INT16U*value)

TLV5608芯片D/A转换初始化子程序(TLV5608Init.c)

voidTLV5608Init(void)

TLV5608芯片D/A转换子程序(TLV5608Z.c)

voidTLV5608Z(INT16Uchannel,INT16Ubuf)热敏电阻温度传感器灰度传感器超声波传感器红外线传感器实现计数与定时的根本方法

完全硬件方式

完全软件方式

可编程定时器

9.1.2MC9S12DG128BMCU的定时接口根本原理概述定时器模块的3类根本存放器

定时器系统控制存放器1(TSCR1)

定时器系统控制存放器2(TSCR2)

定时器计数器(TCNT)

主定时器中断标志存放器2(TFLG2)

9.2.2定时器模块的中断

13个中断向量

8个定时器通道产生的中断

1个模数计数器下溢中断

1个脉冲累加器B溢出中断

1个脉冲累加器A输入中断

1个脉冲累加器A溢出中断

1个定时器溢出中断

9.2.3定时溢出中断编程C语言程序实例〔MCU方程序〕

定时溢出中断编程C语言程序实例主程序(main.c)

第1步:禁止总中断

第2步:芯片初始化

第3步:模块初始化(串口初始化、定时器1初始化〕

第4步:内存初始化

第5步:开放各模块中断〔开放SCI0接收中断、开放定时器1溢出中断〕

第6步:开放总中断

第7步:发送当前"时分秒"

第8步:转第7步

定时溢出中断编程C语言程序例向量表文件(Vectors.c)

void(*constvector[])()={

……

isrRe,//ffd6(SCI0中断)

……

isrTimOver,//ffde(时钟溢出)

……

_start//fffe(reset)

};输入捕捉的根本含义

与输入捕捉功能相关的引脚

IOC0~IOC7

8个通道分成两组,每组4个通道

输入捕捉的根本含义输入捕捉存放器

输入捕捉/输出比拟选择存放器(TIOS)

通道存放器0~7(TC0~7)

定时器中断标志存放器1(TFLG1)

定时器中断允许存放器(TIE)

定时器控制存放器3/定时器控制存放器4(TCTL3/TCTL4)

输入控制修改存放器(ICOVW)

输入控制系统控制存放器(ICSYS)

延迟计数控制存放器(DLYCT)

定时器输入捕捉保持存放器0~3(TC0H~TC3H)

模数减1计数器(MCCNT)

9.3.3带缓冲和不带缓冲的输入捕捉通道

不带缓冲的输入捕捉通道

带缓冲的输入捕捉通道

1)输入捕捉锁存模式

2)输入捕捉队列模式

9.3.4输入捕捉中断编程C语言程序实例输入捕捉中断编程C语言程序例主程序(main.c)

第1步:禁止总中断

第2步:芯片初始化

第3步:模块初始化(输入捕捉初始化、小灯初始化〕

第4步:开放总中断

第5步:转第5步〔等待中断〕

输入捕捉中断编程C语言程序例向量表文件(vectors.c)

void(*constvector[])()={

……

ISR_TimerChan0,//ffee(定时器通道0)

……

_start//fffe(复位)

};输出比拟的根本含义

与输出比拟功能相关的引脚

与输入捕捉的引脚相同

输出比拟的含义

功能:用程序的方法在规定的时刻输出需要的电平,实现对外部电路的控制。

9.4.2输出比拟存放器

输入捕捉/输出比拟选择存放器(TIOS)

定时器控制存放器1/定时器控制存放器2(TCTL1/TCTL2)

通道存放器0~7(TC0~7)

定时器强制输出比拟存放器(CFORC)

输出比拟7屏蔽存放器(OC7M)

输出比拟7数据存放器(OC7D)

定时器溢出翻转存放器(TTOV)

定时器中断允许存放器(TIE)和主定时器中断标志存放器1(TFLG1)脉冲累加的根本含义

与脉冲累加功能相关的引脚

外部引脚为P0~P3

脉冲累加的含义

脉冲累加器有两种工作模式

脉冲累加锁存模式

脉冲累加队列模式

9.5.2脉冲累加存放器

16位脉冲累加器A控制存放器(PACTL)

脉冲累加标志存放器(PAFLG)

16位脉冲累加器B控制存放器(PBCTL)

脉冲累加器B标志存放器(PBFLG)

脉冲累加器计数器3~0(PACN3~PACN0)

输入脉冲累加器控制存放器(ICPAR)

8位脉冲累加器保持存放器3~0(PA3H~PA0H)

16位模数减1计数器控制存放器(MCCTL)

16位模数减1计数器标志存放器(MCFLG)

9.5.3脉冲累加器编程C语言程序实例〔MCU方程序〕

定时器脉冲累加器编程C语言程序实例主程序(main.c)

第1步:禁止总中断

第2步:芯片初始化

第3步:模块初始化(串行通信初始化、脉冲累加器初始化〕

第4步:内存初始化

第5步:开放总中断

第6步:等待中断,将计数值发送给PC机

第7步:转第6步

定时器脉冲累加器A初始化子程序(PA.c)

第1步:禁止总中断

第2步:设置单独使用脉冲累加器的条件

第3步:设置脉冲累加方式

第4步:选择脉冲累加器计数器加1操作的触发条件

第5步:设置中断条件

第6步:启用脉冲累加器A

第7步:开放总中断

脉冲累加器计数器中断编程C语言程序例向量表文件(vectors.c)

void(*constvector[])()={

ISR_Empty,//ff80(保存)

……

ISR_PA,//ffda(脉冲累加输入边缘)

ISR_PAOV,//ffdc(脉冲累加器A溢出中断)

……

_start//fffe(复位)

};CAN的根本概念CAN的分层结构

CAN对象层

报文滤波以及状态和报文的处理。

CAN传输层

把接收到的报文提供应对象层,以及接收来自对象层的报文。

物理层

在不同节点之间根据所有的电气属性进行位信息的实际传输。

10.1.3报文传输和帧结构数据帧10.2MSCAN12模块简介MSCAN12特性

符合CAN2.0A/B协议标准

支持标准和扩展数据帧格式

数据长度为0~8字节

可编程位速率,最大1Mbps

支持远程帧

拥有5个FIFO机制的接收缓冲区,3个具有局部优先级的发送缓冲区

具有灵活的标识符验收模式

10.2.2外部引脚报文存储结构标识符验收滤波

MSCAN12有4种滤波器方式

双标识符验收过滤器

四个标识符验收过滤器

八个标识符验收过滤器

关闭过滤器MSCAN12模块内存映射10.3.2MSCAN12模块存放器

1.控制存放器

1)MSCAN控制存放器0(CANCTL0)

2)MSCAN控制存放器1(CANCTL1)

3)MSCAN总线时钟存放器0(CANBTR0)

4)MSCAN总线时钟存放器1(CANBTR1)

5)MSCAN接收器标志存放器(CANRFLG)

6)MSCAN接收器中断使能存放器(CANRIER)

7)MSCAN发送器标志存放器(CANTFLG)

8)MSCAN发送器中断使能存放器(CANTIER)

9)MSCAN发送器消息中止控制存放器(CANTARQ)

10)MSCAN发送器消息中止控制存放器(CANTAAK)

11)MSCAN发送缓冲区选择存放器(CANTBSEL)

12)MSCAN标识符验收控制存放器(CANTIDAC)

13)MSCAN接收错误计数存放器(CANRXERR)

14)MSCAN发送错误计数存放器(CANTXERR)

15)MSCAN标识符验收码存放器(CANIDAR0~7)

16)MSCAN标识符屏蔽存放器(CANIDMR0~7)

2.报文存储机制

(1)标识符存放器(IDR0~3)

(2)数据段存放器(DSR0~7)

(3)数据长度存放器(DLR)

(4)发送缓冲区优先级存放器(TBPR)MSCAN12初始化

MSCAN12通信头文件〔MSCAN12.h〕

〔1〕CAN通信存放器及标志位定义

〔2〕CAN通信用到的设置量定义

〔3〕CAN通信相关函数声明

〔4〕CAN通信初始化

MSCAN12通信函数文件〔MSCAN12.c〕

〔1〕CAN通信初始化

voidCANInit(void)

〔2〕CAN发送1帧数据

INT8UCANSND1DFRM(INT16UID,INT8U*DataBUF,INT8ULEN)

〔3〕查找空闲发送缓冲区

INT8UGetSNDBUF(void)

〔4〕CAN接收1帧数据

INT8UCANRCV1FRM(INT8U*CANRCVBUF)

10.4.1MSCAN12自环通信方式测试工程

1.自环通信方式测试工程主函数文件main.c

第1步:定义常量,初始化变量

第2步:禁止总中断

第3步:芯片初始化

第4步:模块初始化(串口初始化、MSCAN12模块初始化〕

第5步:开放SCI0接收中断

第6步:开放总中断

第7步:等待时间增加1。假设等待时间到转第8步,否那么转第7步。

第8步:发送"Hello!!!",假设发送成功转第9步,否那么转第10步。

第9步:CAN等待接收数据,假设接收到那么通过SCI向PC发送数据,否那么发送“ReceiveError!〞。转第11步。

第10步:通过SCI向PC发送“SendErr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论