嵌入式mcu-m16c应用举例课件_第1页
嵌入式mcu-m16c应用举例课件_第2页
嵌入式mcu-m16c应用举例课件_第3页
嵌入式mcu-m16c应用举例课件_第4页
嵌入式mcu-m16c应用举例课件_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式mcu-m16c应用举例,嵌入式MCU应用举例,嵌入式mcu-m16c应用举例,一.预备知识:预处理命令#pragma,介绍一些常用的#pragma命令的扩展功能。 1.用于SB相对地址预处理命令: pragma SBDATA 变量名 对变量进行声明,访问该变量时NC30会生成AS30伪指令“.SBSYM”,并使用SB相对寻址模式。这样可以生成高效的ROM代码,下图是“pragma SBDATA”命令的图形说明。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,2.生成位操作指令,NC30允许用户以位为单位处理数据。设置一个位段来实现位操作,位段利用结构体定义符号,其格式

2、如下: stuct tag 类型说明符号 位符号:比特数 ; 引用一个位符号时,用点“.”分割开: 变量名.位符号,嵌入式mcu-m16c应用举例,指定该位的方法和对结构体的处理相同。位段在存储器中的位置的分配与编译器有关。NC30对位段分配存储区时有两条规则: 从LSB开始顺次分配 另一种类型的数据放到下一个地址 下图是如何对位段分配存储区的例子:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,设定位段后,虽然已可以在程序中处理位符号,但生成的是一条运算、逻辑指令,并不是位指令,若使用扩展功能 “ pragma BIT”对位段进行声明,则可以生成代码效率更高的“直接位操作指

3、令” 下图示出了一个例子,说明了如何写这条预处理命令及其展开情况的。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,除了用“pragma BIT”声明的数据外,对下面的变量NC30编译器也可以生成直接位操作指令: 用“pragma SBDATA”声明的变量 用“pragma ADDRESS”声明的变量,且其地址位于绝对地址00000到01FFF内 用fbit指定的近程变量。,嵌入式mcu-m16c应用举例,3.I/O接口的控制,在控制内置I/O接口时,需指定变量的绝对地址。在NC30中可以使用扩展功能 “pragma ADDRESS”来指定变量的绝对地址,其格式如下: pra

4、gma ADDRESS 变量名 绝对地址 注意只对函数外定义的变量和在函数内定义的静态变量有效。扩展功能 “pragma ADDRESS”也可以用来设置SFR区。使用这种方法设置SFR时,一般准备一个独立的文件,并将其包含在源程序中。 下图是一个SFR区定义文件的例子,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,二.I/O口控制,1.LED特性 LED是发光二极管的简称,它通过一定的电流发光,LED有极性 2.LED的电路连接 在M16C/62C学习板上,将电阻和LED分别接在M30620FCAFP的p7口上,如下图所示:,嵌入式mcu-m16c应用举例,当端口输出为“L”

5、时,LED亮灯,端口输出为“H”时,LED灯灭。,嵌入式mcu-m16c应用举例,3.LED亮灯程序(2),编写使LED1和LED2交错亮的程序 编写顺序如下: 1.源文件的准备 启动程序和向量文件按照原来的使用,仅做成控制I/O的主程序。 (1).在硬盘里做新的文件夹,文件夹名采用集成开发环境TM的项目名,此处用”sampleA” (2).对于sampleA.c”,采用编译程序用合乎规则的内容编写。,嵌入式mcu-m16c应用举例,2.编译 用集成开发环境TM做成项目,并进行编译,做成在调试器(kd30)上的可运行的文件(sampleA.x30)以及用闪存写入器写入闪存的文件(sampleA

6、.mot) 3.调试 用调试程序确认其操作。,嵌入式mcu-m16c应用举例,4.将程序固化到ROM 控制程序清单如下: #pragma ADDRESS P7 3edh /*定义P7口的地址*/ #pragma ADDRESS PD7 3efh void _main(void) unsigned char P7,PD7; /*在p7方向寄存器和数据器里装入值作为变量*/ /*宏定义*/ #define LED_off /*LED1,2灯灭*/ #define LED1_on /*LED1灯亮,LED2灯灭*/ #define LED2_on /*LED1灯灭,LED2灯亮*/,嵌入式mcu-m

7、16c应用举例,main( ) unsigned long i; P7=LED_off; /*p7口输出H,灯灭*/ PD7=0Xff; /*p7口方向输出*/ for(; ;) P7=LED1_on; /*LED1灯亮*/,嵌入式mcu-m16c应用举例,for(i=0 x8ffff; ;) /*等待(软等待)*/ i-; if(i=0) break; P7=LED2_on; /*LED2灯亮*/ for(i=0 x8ffff; ; ) /*软等待*/ i-; If(i=0) break; ,嵌入式mcu-m16c应用举例,三.C语言和汇编语言混合编程,Nc30编译器允许使用c语言和汇编语言

8、进行混合编程。在c语言程序中,可以进行直接插入汇编语言来编写程序,也可以用调用汇编语言编写的子程序的方式来进行。反之,在汇编语言的程序中,也可以调用C语言所写的函数。,嵌入式mcu-m16c应用举例,1直接插入汇编语言方式,在C语言编程中,对与一些硬件有关的操作,如直接改写C标志,用C语言则有些不方便,这时可以有两种方法解决这个问题,一个是使用“asm”功能,另一个是使用“pragma ASM”功能,嵌入式mcu-m16c应用举例,(1)使用“asm”功能,当在某一行写入asm时,可以把双引号中的字符串按汇编语言看待插入汇编程序,通常这用来直接改变标志和寄存器的值或一些要求高速处理的语句。 当

9、要访问的是一个函数内部的自动变量时,写入一个使用“$FB”的语句,编译器会自动识别$,用FB寄存器的偏移值来取代它,C语言中的自动变量名可以用于汇编语言程序。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,(2).使用“pragma ASM”功能,如果嵌入的汇编语言包含多行,这时可以使用“pragma ASM”功能,NC30编译器能识别位于“pragma ASM”和“pragma END ASM”之间的程序段,直接插入编译后的汇编语言在源程序中,见下例:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,2调用汇编子程序,Nc30

10、编译器允许在C语言程序中调用汇编语言子程序。首先说明一下的是nc30编译器在调用一个函数时所作的处理,这时要进行三项操作: 建造及释放堆栈帧 传送参数值 传送返回值,嵌入式mcu-m16c应用举例,下图是一个C语言程序执行时堆栈帧的建造过程:,嵌入式mcu-m16c应用举例,NC30编译器有两种方法传递函数的参数值,一种是“通过寄存器”,另一种是通过堆栈。参数传递遵守的规则如下表,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,函数的返回值(结构体和共用体除外)都在寄存器中,数据类型不同,存储的寄存器也不同,见下表:,嵌入式mcu-m16c应用举例,若返回值用结构体和共用体描述

11、时,则通过存储地址和堆栈传送参数值。也就是说在调用该函数时,先开一个存储区,将其地址作为一个隐型参数存入堆栈。被调用 函数把返回值写到这个区,从该函数返回时可根据此地址取得返回值。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,在nc30编译器中,C程序中的函数名和汇编程序名之间的关系随函数的性质而定,下表示出了函数转换成汇编程序中符号的规则:,嵌入式mcu-m16c应用举例,下面说明如何在C程序中调用一个汇编子程序。,在C程序中写入一行预处理命令来规定参数传递方式。 pragma PARAMETER 函数名 (寄存器名,) 这种调用方式较为简单,但要注意: 1.在写入“pr

12、agma PARAMETER ”时,确认已对函数做了声明。,嵌入式mcu-m16c应用举例,2.看一下函数声明中: 函数参数值应该是8位或16位整数或16位指针。 返回值不能用结构体或共用体。 寄存器个数和参数个数应匹配。 寄存器名不区分大小写。 由pragma指定的函数体如C程序中已定义过会导致出错。,嵌入式mcu-m16c应用举例,汇编程序应该按照下列规则编写:,1.汇编子程序写成一个单独的文件 2.子程序名应遵守符号转换的规则 3.在c程序中对调用的子程序已做了原型声明。 下图是一个使用“pragma PARAMETER” 的一个例子,这个程序的功能是用LED显示加 计数的结果,LED显

13、示部分是用汇编语言写的。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,另一种方法是使用间接寻址方式调用汇编子程序的,注意,在使用函数指针用寄存器进行参数传递的场合,不要用“pragram PARAMETER”来规定。使用存储类型说明符“extern”声明函数为外部参考。 下图是使用间接寻址调用汇编子程序的一个例子,按照参数mode的值,选择进行“加”计数器或“减”计数器。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,3 汇编程序调用c语言程序,在汇编程序中调用C语言的函数时,应符合下面的规则: 1.前述的符号转换规则; 2.C语言函数构成一个单独的文件;

14、 3.在汇编语言文件中,用“.glb”伪指令说明C语言函数为外部过程。 下图示出了汇编程序中调用C语言函数的情况:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,四.中断程序,所谓中断是CPU相应请求停止正在执行的任务去处理其它的任务,处理完后,又恢复进行原来的操作。在M16C/62中,有根据外部端子或内部时钟电路等产生中断的方法和在程序中执行命令而产生中断的方法。,嵌入式mcu-m16c应用举例,1.M16C/62的中断 M16C/62有很多中断方式,本课程主要学习是二种:一种是根据I/0中的INT0或INT1从外部端子进行的中断,另一种是使用定时器进行的时间中断。,嵌入式

15、mcu-m16c应用举例,2.使用中断的必要处理,用程序进行中断时有必要进行下面的处理: 中断函数的处理; 允许中断; 中断向量的设定;,嵌入式mcu-m16c应用举例,(1).中断函数,中断函数是用来记述中断时执行处理的函数。 中断函数用pragma INTERRUPT函数名来声明 中断函数用来中断原来程序的进程,所以要将不想置换的寄存器在中断前进行保存,中断后返回,中断函数结束后要进行返回原来的操作,嵌入式mcu-m16c应用举例,(2).允许中断,允许中断需要具备以下的条件: 根据 I 标志(中断禁止标志)确定是否允许中断,是否允许全部的屏蔽中断。 根据每个中断源优先级的设定,确定是否允

16、许中断。只允许符合条件的中断源进行中断,中断优先级分为17级,数值大的,优先级高。,嵌入式mcu-m16c应用举例,(3)中断向量的设定,中断向量是预先存放的中断函数的起始地址。中断函数与其它函数不同,它不是受另外函数调用而执行的。中断函数是相应中断请求时,根据存放着中断向量的地址开始执行程序操作的。,嵌入式mcu-m16c应用举例,3.来自INT0口的中断,(1)控制INT0中断的寄存器如图:,嵌入式mcu-m16c应用举例,(2)规定。程序启动时LED1-LED8等灭,按下INT0开关时LED1-LED8灯亮。 (3)方法。 main程序:使LED灯灭,建立中断等待的无限循环语句。 中断程

17、序:使用LED灯灭,从中断返回。 (4)文件的分配 启动程序:nctro.a30+sect30.inc 主程序文件:rei3.c+m16io.h,嵌入式mcu-m16c应用举例,(5)文件的更改 设定sect30.inc中断向量的地址 将中断程序记叙到主程序中 (6)程序清单 文件名为sect30.a30的程序清单如下:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,程序文件名为rei3.c程序清单:,嵌入式mcu-m16c应用举例,4.定时器中断,M16C/62学习板内置有11个16位定时器,按功能可分为定时器A(5个)定时器B(6个)两种,

18、这些定时器有各种不同的功能。下面以定时器A0为例。 (1)定时器A0相关的寄存器如下图:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,(2)设定内容 计数源f32(主时钟进行32分频的时钟) 若做1秒的计数,则要选用周期最大的计数源 无脉冲输出 无门功能,嵌入式mcu-m16c应用举例,(3)规定。用二进制数将LED1-LED8用于每1秒 的累加计数。 (4)方法。使用定时器A0做计数源,要做1s的计数,计算一个周期需要2us,则需要计数1s/2us=500000次,因为是16位计数器,不能设定为500000次,若取1s100ms10次 100ms2us50000次 这样加

19、入100ms的中断,只需进行10次计数即可,嵌入式mcu-m16c应用举例,(5)文件的分配 启动程序:ncrt0.a30+0-sec30.inc 主程序文件:rec3.c+m16io.h (6)文件的更改 设定sect30.inc的中断向量的地址 将中断程序记录在主程序中。,嵌入式mcu-m16c应用举例,#include “m16io.h” #define PORTIN 0 x00 #define PORTOUT 0 xff #define LED_OFF 0 xff #define LED_ON 0 x00 #define CNT_TA0 5000-1 #define CNTIS_TAO

20、 10 void portinit(void); void timerinit(void);,嵌入式mcu-m16c应用举例,void ta0int(); #pragma INTERRUPT ta0int char ta0flag; int cnt1s char ledcnt; void main() cnt1s = CNT1S_TAO; ledcnt = 0 x00; portint(); timerinit(); _asm(“tFSET I”); while(1); ,嵌入式mcu-m16c应用举例,void ta0int() cnt1s-; if(cnt1s = 0) ledcnt+;

21、port_7=ledcnt0 xff; cnt1s=CNT1S_TA0; ta0 = CNT_TA0; ,嵌入式mcu-m16c应用举例,void timerinit(void) udf = 0 x00; ta0mr = 0 x80; ta0 = CNT_TA0; ta0ic = 0 x06; tabsr = 0 x01; void port(void) 同前 ,嵌入式mcu-m16c应用举例,五.LCD模块的控制,LCD模块是在LCD显示器里预先装入用于显示的部件。在M16C/62学习板上的LCD板上的sc1602bs被广泛的应用。 1.LCD模块的构成 当将数据写入LCD时,在LCD模块内

22、对应的文字显示位置的存储器也被写入。只要不改写,根据内部LCD控制器的控制,就将自动地继续显示。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,2.LCD模块的初始设定,LCD模块在电源接通后,要进行一系列的初始化设定,其设定步骤如下: 将复位的操作以8位方式进行3次,如下图所示:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,此时LCD模块接受8位信息,M16C/62学习板的LCD的低4位接地。传输“0”数据,根据3次操作送出的功能模块,LCD模块处于取8位数据的受信状态。 用4位传输数据的初始化如下图所示:,嵌入式mcu-m16c应用举例,嵌入式mcu-

23、m16c应用举例,3.控制LCD模块的函数,(1)等待函数 LCD板的控制中,要求等待的时间有三种:15ms,4.1ms,0.1ms。 void wait_ms(int k) unsigned short wi,wj; for(wi=0;wi15*k;wi+) for(wj=0;wj306;wj+) ; ,嵌入式mcu-m16c应用举例,(2).8位命令输出函数,初始设定的开始不能用四位命令传输数据,为此要制作用8位传输数据的函数,如下图所示:,嵌入式mcu-m16c应用举例,(3)用4位模式传输命令的函数,命令数据采用8位无意义,4位传输需要分高4位,低4位二次传输。用4位模式传输命令的函数

24、制作,如下图所示:,嵌入式mcu-m16c应用举例,(4)用4位传输数据的函数,在传输命令和数据时,RS的值会发生改变,为此,作出与传输命令不同的函数,如下图所示:,嵌入式mcu-m16c应用举例,(5)BUSY校验函数,LCD模块在前一写入过程未结束时,后一数据不能送入。写入过程中LCD模块的BUSY标志为“1”,只有在BUSY标志为“0”时才能进行后一数据的写入。为此,要制作读出的BUSY标志的函数。如下图所示;,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,其流程和清单如下:,嵌入式mcu-m16c应用举例,(6)LCD模块初始设定的函数,在LCD模块内时按照确定的规格

25、来设定的,在下面的清单上加以说明。,嵌入式mcu-m16c应用举例,六.A/D和D/A转换,A/D转换 A/D转换器由一个电容耦合放大器的10位逐位逼近A/D转换电路构成。P100到P107为8个A/D输入引脚,用A/D控制寄存器0的位2,位1和位0选择其中的一个进行A/D转换。P95和P96也可以用作模拟信号输入端。用作A/D转换的I/O口的方向寄存器必须设为输入。 原理框图如下:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,A/D转换可以用软件启动,也可以用外部信号触发产生。 A/D转换的工作时钟AD在电源为5V时有三种:,在电源为V时有,为的主时钟()。,嵌入式mcu

26、-m16c应用举例,A/D转换的结果存在所选引脚的A/D寄存器中。共有8路A/D输入,每路有两个8位寄存器存放A/D转换结果。它们的地址为03C0H-03CFH.当设为10位分辨率时,低8位存在偶地址中,高2位存在奇地址中。当设为8位分辨率时,8位存在偶地址中。,嵌入式mcu-m16c应用举例,A/D转换有5种工作方式,由A/D控制寄存器0的位4和位3选择。 单次模式 对某个指定的引脚进行A/D转换,只做一次。 重复模式 对某个指定的引脚进行A/D转换,重复多次 单次扫描模式 对两个或更多的引脚进行A/D转换,逐个转换一次 重复扫描模式0 对两个或更多的引脚进行A/D转换,重复轮流进行转换。

27、重复扫描模式1 与重复扫描模式0不同是扫描时可以指定一些输入引脚进行重点转换。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,1.单次模式,在单次模式中,对模拟输入端选择位选出的引脚进行单次A/D转换。下表为单次模式的性能说明。,嵌入式mcu-m16c应用举例,下图为用软件触发启动A/D转换的单次模式工作时序图,嵌入式mcu-m16c应用举例,当A/D转换开始标志设置为“1”,A/D转换开始工作。 在A/D转换完成后,把逐次比较寄存器的内容(转换结果

28、)存到A/D寄存器。此时A/D转换中断请求变为“1”。 A/D转换启动标志变为“0”, A/D转换停止。 下面图示描述转换过程:,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,2.重复模式,在重复模式中,对模拟输入端选择位选出的引脚重复进行A/D转换。下表为重复模式的性能说明:,嵌入式mcu-m16c应用举例,3.单次扫描模式,在单次扫描模式中,用A/D扫描引脚选择位依次做A/D转换的引脚。下表为单次扫描模式的性能说明:,嵌入式mcu-m16c应用举例,4.重复扫描模式,有两种重复扫描模式:重复扫描模式0和重复扫描模式1。 在重复扫描模式0中,

29、用A/D扫描引脚选择位选出的用作重复扫描A/D转换的引脚。,嵌入式mcu-m16c应用举例,重复扫描模式1,在重复扫描模式1中,对所有引脚作重复扫描A/D转换,重点是用A/D扫描引脚选择位选出的引脚。,嵌入式mcu-m16c应用举例,5.A/D转换注意事项:,(1)对A/D控制寄存器0(位6除外)和1的各位及A/D控制寄存器2位0的写操作,应在A/D转换停止时进行。特别是VREF连接位从“0”变到“1”,要经过1us或更长的一段时间,再启动A/D转换。,嵌入式mcu-m16c应用举例,(2)为了减小噪声对A/D转换的影响,最好单用一个电源加到AVcc和VREF引脚。 AVss和AVcc引脚之间

30、, AVss和VREF引脚之间要接一个电容。 AVss引脚和模拟输入端之间最好也接一个电容。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,A/D转换精度,(1)10位模式和8位模式 A/D转换有10位和8位模式 使用10位模式时,A/D转换的输出为10位,理论上A/D转换特性如下图。 这时加到比较器的电压Vref的值与逐次比较寄存器内容n的关系为: Vref=VREF/1024nVREF/2048 式中VREF是A/D转换的基准电压。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,A/D转换过程如下:,转换开始时把逐次比较寄

31、存器的内容清零,把第9位置置“1”,把由逐次比较寄存器产生的比较电压Vref与模拟输入端的电压VIN进行比较 如果VrefVIN 则把逐次比较寄存器的位9置“0”,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,转换精度:,A/D转换的精度在10位模式时为 有取样保持功能: AN0到AN7输入: 3LSB ANEX0和ANEX1输入(包括有外接运算放大器的模式): 7LSB,嵌入式mcu-m16c应用举例,无取样保持功能: 3LSB 在8位模式时为: 有取样保持功能: 2LSB 无取样保持功能: 3LSB,嵌入式m

32、cu-m16c应用举例,嵌入式mcu-m16c应用举例,6.D/A转换器,它是一个8位R-2R型的D/A转换器。片内含有两个独立的这种D/A转换器。 D/A转换在写入一个值到相应的D/A转换寄存器时发生。两个D/A转换寄存器的地址分别为03D8H和03DAH。由D/A控制器的位0和位1 决定转换结果是否输出。,嵌入式mcu-m16c应用举例,D/A转换输出端DA0,DA1与P93,P94引脚共用,这些端口用作D/A转换时,不要把该端口设成输出,不要接通相应端口的上拉。 输出模拟电压(v)由D/A转换寄存器中的设置值(n:十进制)决定。 VVREFn/256 (VREF为参考电压),嵌入式mcu

33、-m16c应用举例,下表列出了D/A转换器的性能,嵌入式mcu-m16c应用举例,下图为D/A转换器的方框图,嵌入式mcu-m16c应用举例,下图为D/A控制寄存器的组成,嵌入式mcu-m16c应用举例,下表为D/A转换寄存器的组成,嵌入式mcu-m16c应用举例,下图为D/A转换器的等效电路,嵌入式mcu-m16c应用举例,下面我们举一个在多媒体应用中,有关A/D和D/A转换器的应用实例。,首先我们必须了解下面的知识: 在单片机的多媒体应用中,需要对声光等模拟信号进行采集和处理。M16C/62单片机内部置有多路10位A/D转换器和2个D/A转换器,和适合这方面的应用。 首先我们对语音信号进行

34、采集,大概需要8K的采样率,这样才能使语音更接近真实,从而能够对信号进行识别和分类。 采集的语音信号经过低噪声放大器放大到足够的幅度后,才加到A/D输入端。,嵌入式mcu-m16c应用举例,下面是语音信号采集电路图,其中语音信号经过放大处理后,接到单片机的A/D输入端AN0,每按一次键采集一段语音,存到RAM中。,嵌入式mcu-m16c应用举例,在上图中,按键接在INT0端,工作在中断方式,每次按键启动一次DMA过程,把采集到的语音数据存到外部RAM中从D0000H地址开始的单元。本例中我们采样个数为32K字节。 程序流程图和信号采集程序清单 如下所示:,嵌入式mcu-m16c应用举例,嵌入式

35、mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,/*使用相对地址预处理命令对变量进行声明*/ pragam SBDATA sw_count pragam SBDATA p_count pragam SBDATA t_disp,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,unsigned int count=32768; void ta3int() unsigned int t; p_count+; if(p_count=count) TA3IC = 0X 00; t=(AD02); a_ad8=(ch

36、ar)t; DM0SL=DM0SL | 0X80 ADCON2=0X01; ADCON0=0X20; ADCON0=ADCON0 | 0X40; TIMERA3=2000; ,嵌入式mcu-m16c应用举例,在前面的信号采集中,我们用到了A/D转换器,而我们要听到声音,需要把数字声音信号转换成模拟电压。这就要用到D/A转换器,M16C/62单片机内有2个8位D/A转换器,可以完成这个功能。 我们用8个按键产生频率不同的音频信号。当不同的键按下时,从DA0口分别输出不同的音乐信号。键盘电路如下图所示,不同的键按下,加到A/D转换输入口的电压不同,于是一个I/O口可以识别多个按键。,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16c应用举例,嵌入式mcu-m16

温馨提示

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

评论

0/150

提交评论