1 / 46

知识回顾与新课引入

知识回顾与新课引入. 1 、单片机的组成?各部分功能是? 2 、单片机与电子计算机的组成有何异同? 3 、 ATmega16 的 PDIP 封装形式有多少个引脚?其中 I/O 占了多少个引脚? 4 、单片机 C 语言开发时常用的头文件有?. I/O 接口及应用. 并行接口概述 并行接口应用举例 位检测与位控制 位操作实例. 并行接口概述. 并行输入工作原理 并行输出工作原理 并行输入/输出接口工作原理. 并行输入工作原理.

king
Télécharger la présentation

知识回顾与新课引入

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 知识回顾与新课引入 1、单片机的组成?各部分功能是? 2、单片机与电子计算机的组成有何异同? 3、ATmega16的PDIP封装形式有多少个引脚?其中I/O占了多少个引脚? 4、单片机C语言开发时常用的头文件有?

  2. I/O接口及应用 • 并行接口概述 • 并行接口应用举例 • 位检测与位控制 • 位操作实例

  3. 并行接口概述 • 并行输入工作原理 • 并行输出工作原理 • 并行输入/输出接口工作原理

  4. 并行输入工作原理 并行输入接口中某一位的简化电路如图4-1所示。引脚的状态取决于外电路,缓冲器后的状态为引脚状态,三态门的输出由RP端控制,当RP为0时,三态门的输出为高阻状态,数据总线不受引脚影响;当RP为1时,三态门的输出与输入相同,此时为读引脚状态。在读接口时,RP控制端有效。

  5. 并行输入接口某一位的简化接口电路如图:

  6. 并行输出工作原理 并行输出接口中某一位的简化接口电路如图所示。当控制端WP为0(低电平)时,数据锁存器的输出端Q为上次输出的值,与输入端D无关,数据总线操作不影响输出。当控制端WP为1时,数据锁存器的输出端Q的值为输入端D的值,为输出数据状态。数据输出到引脚。锁存器输出端Q为0时,输出为低电平;锁存器输出端Q为1时,输出高电平。RL控制端为读取输出值。

  7. 并行输出接口某一位的简化接口电路如图:

  8. 并行输入/输出接口工作原理

  9. 并行输入/输出接口工作原理 • 端口A • 端口B • 端口C • 端口D

  10. 端口A • 端口A特性 • 端口作为通用数据I/O口 • 端口的第二功能

  11. 端口A特性 端口A是一个8位双向I/O口。端口A包含3个I/O地址,其中有两个寄存器和一个输入引脚:数据寄存器PORTA、数据方向寄存器DDRA、输入引脚PINA。数据寄存器PORTA和数据方向寄存器DDRA是可读可写的,而输入引脚PINA仅仅可读不可写。PINA不是一个寄存器,这个地址是用来访问端口A的物理值。当读取PINA时,读到的是施加于引脚上的逻辑值。端口A的所有引脚都可以单独选择上拉电阻,并且可吸收20mA的电流,所以可以直接驱动LED指示灯。上拉电阻被激活且引脚被拉低时,则该引脚会输出电流。

  12. 端口作为通用数据I/O口 当端口A作为通用输入输出口时,它的8个引脚具有完全相同的功能。数据方向寄存器DDRA的各位用于引脚方向的选择。当DDRAn被置1时,则相应的端口A的引脚为输出引脚;反之,为输入引脚。

  13. 端口的第二功能 端口A 的第二功能比较单一,可以作为ADC的模拟输入端。

  14. 端口B • 端口特性 • 端口作为通用数据I/O口 • 端口的第二功能

  15. 端口特性 端口B是一个8位双向I/O口。端口B包含3个I/O地址,其中有两个寄存器和一个输入引脚:数据寄存器PORTB、数据方向寄存器DDRB、输入引脚PINB。数据寄存器PORTB和数据方向寄存器DDRB是可读可写的,而输入引脚PINB仅仅可读不可写。PINB不是一个寄存器,这个地址是用来访问端口B的物理值。当读取PINB时,读到的是施加于引脚上的逻辑值。端口B的所有引脚都可以单独选择上拉电阻,并且可吸收20mA的电流,所以可以直接驱动LED指示灯。上拉电阻被激活且引脚被拉低时,则该引脚会输出电流。

  16. 端口作为通用数据I/O口 当端口B作为通用输入输出口时,它的8个引脚具有完全相同的功能。数据方向寄存器DDRB的各位用于引脚方向的选择。当DDRBn被置1时,则相应的端口B的引脚为输出引脚;反之,为输入引脚。

  17. 端口的第二功能 引脚第二功能说明如下: ● T0 :T/C0的外部引脚输入。 ● T1 :T/C1的外部引脚输入。 ● AIN0 :当该引脚无上拉电阻并且被配置为输入时,为模拟比较器的正输入端。 ● AIN1 :当该引脚无上拉电阻并且被配置为输入时,为模拟比较器的负输入端。 ● MOSI :SPI的主机数据输出,从机数据输入。 ● MISO :SPI的主机数据输入,从机数据输出。 ● SCK :SPI的主机时钟输出,从机时钟输入。

  18. 端口C • 端口特性 • 端口作为通用数据I/O口

  19. 端口特性 端口C是一个8位双向I/O口。端口C包含3个I/O地址,其中有两个寄存器和一个输入引脚:数据寄存器PORTC、数据方向寄存器DDRC、输入引脚PINC。数据寄存器PORTC和数据方向寄存器DDRC是可读可写的,而输入引脚PINC仅仅可读不可写。PINC不是一个寄存器,这个地址是用来访问端口A的物理值。当读取PINC时,读到的是施加于引脚上的逻辑值。端口C的所有引脚都可以单独选择上拉电阻,并且可吸收20mA的电流,所以可以直接驱动LED指示灯。上拉电阻被激活且引脚被拉低时,则该引脚会输出电流。

  20. 端口作为通用数据I/O口 当端口C作为通用输入输出口时,它的8个引脚具有完全相同的功能。数据方向寄存器DDRC的各位用于引脚方向的选择。当DDRCn被置1时,则相应的端口C的引脚为输出引脚;反之,为输入引脚。

  21. 端口D • 端口特性 • 端口作为通用数据I/O口 • 端口的第二功能

  22. 端口特性 端口D是一个8位双向I/O口。端口D包含3个I/O地址,其中有两个寄存器和一个输入引脚:数据寄存器PORTD、数据方向寄存器DDRD、输入引脚PIND。数据寄存器PORTD和数据方向寄存器DDRD是可读可写的,而输入引脚PIND仅仅可读不可写。PIND不是一个寄存器,这个地址是用来访问端口D的物理值。当读取PIND时,读到的是施加于引脚上的逻辑值。端口D的所有引脚都可以单独选择上拉电阻,并且可吸收20mA的电流,所以可以直接驱动LED指示灯。上拉电阻被激活且引脚被拉低时,则该引脚会输出电流。

  23. 端口作为通用数据I/O口 当端口D作为通用输入输出口时,它的8个引脚具有完全相同的功能。数据方向寄存器DDRD的各位用于引脚方向的选择。当DDRDn被置1时,则相应的端口D的引脚为输出引脚;反之,为输入引脚。

  24. 端口的第二功能 ● RXD :UART的数据接收引脚。 ● TXD :UART的数据发送引脚。 ● INT0 :外部中断源0。 ● INT1 :外部中断源1。 ● OCIB :比较匹配B的外部输出。 ● OCIA :比较匹配A的外部输出。 ● ICP :输入捕获引脚。 ● OC2:比较匹配的外部输出。

  25. 并行接口应用举例 • 例4.2.1彩灯控制 • 例4.2.2二进制数输出控制

  26. 彩灯控制 如图4-4所示的电路,有8只发光二极管接在PC口,每只发光管低电平点亮。如果按图4-5所示的方式点亮,每次点亮两只发光亮,间隔0.2s后,再换成点亮相邻的两只,依此类推,4次后,再回到第一次,周而复始,形成彩灯的移动。 图4-4 彩灯控制电路 图4-5 彩灯点亮示意图

  27. 彩灯控制程序 #include <mega16.h> #include <delay.h> void main( ) { char i,j ; /* PORTC定义 */ PORTC=0x00 ; DDRC=0X11; while(1) { j=0x11 ; For (i=0; i<4 ;i++) { PORTC= ~j ; delay_ms(100) ; j =j <<1 ; } }; }

  28. 例4.2.2二进制数输出控制 如图4-6所示为二进制数输入、输出控制的电路原理图。 图4-6 并行输入/输出应用

  29. PC口作为输入接口使用,每一位接有上拉电阻和开关。当开关断开时,输入为高电平,读取的结果为1;当开关闭合时,输入为低电平,读取的结果为0。这样8个开关s0~s7的状态可以组成一个8位的二进制输入数。如图4-7所示,s7、s5、s2、s0断开,s6、s4、s3、s1闭合。PC口作为输入接口使用,每一位接有上拉电阻和开关。当开关断开时,输入为高电平,读取的结果为1;当开关闭合时,输入为低电平,读取的结果为0。这样8个开关s0~s7的状态可以组成一个8位的二进制输入数。如图4-7所示,s7、s5、s2、s0断开,s6、s4、s3、s1闭合。 开关: S7 S6 S5 S4 S3 S2 S1 S0 状态: 开 闭 开 闭 闭 开 闭 开 输入值:1 0 1 0 0 1 0 1 所以,输入的二进制数为0xa5。

  30. PD口作为输出口使用,每一位与VCC之间接有一个限流电阻和一个发光二级管。当PD口的某位输出1时,引脚为高电平,发光管不亮;当PD口的某位输出0时,引脚为低电平,发光管点亮。如果输出二进制数10100101,结果如下:PD口作为输出口使用,每一位与VCC之间接有一个限流电阻和一个发光二级管。当PD口的某位输出1时,引脚为高电平,发光管不亮;当PD口的某位输出0时,引脚为低电平,发光管点亮。如果输出二进制数10100101,结果如下: 位数: 7 6 5 4 3 2 1 0 输出: 1 0 1 0 0 1 0 1 灯: 灭 亮 灭 亮 亮 灭 亮 灭 所以,可以用灯的亮和灭来表示二进制数。

  31. 例如:8个灯从高位到低位的状态为灭灭亮亮亮灭灭灭,则二进制数为11000111。现要求输入变化时,输出显示输入的结果,则程序如下:例如:8个灯从高位到低位的状态为灭灭亮亮亮灭灭灭,则二进制数为11000111。现要求输入变化时,输出显示输入的结果,则程序如下: #include <mega16.h> void main( ) {DDRC= 0x00 ; PORTC=0x00 ; DDRD= 0xff ; while(1) PORTD=PINC ; }

  32. 位检测与位控制 • 位变量 • 位检测 • 位控制 • 位运算 • 位测试

  33. 位变量 在CVAVR中可以直接定义位变量为全局变量,例如: bit on; 也可以在定义时赋值: bit on=1, off=0;

  34. 位检测 位检测具有位读取的含义,根据C语言中赋值语句的含义,等号右边的为读取值。所以等号右边出现位变量,就是对位的检测。如果要检测某个输入引脚的状态,可以在赋值语句的右边使用接口输入变量的位操作符。 例如读取C口的第0位到位变量weib1,可以编程如下: bit weib1; weib1=PINC.0;

  35. 位控制 位控制具有把一个位变量输出到某个引脚的含义。所以位控制时,赋值语句的左边为接口输出变量的位操作符。例如把C口的第0位控制为高电平,可编写程序如下: DDRC=0xff; PORTC.0=1;

  36. 位运算 位运算一般有:置1、清0、取反、与、或、非、异或等运算。 置1:位变量=1; 清0:位变量=0; 取反:位变量=!位变量 与运算:位变量3=位变量1&位变量2 或运算:位变量3=位变量1|位变量2 异或运算:位变量3=位变量1^位变量2 非运算:位变量2=!位变量1

  37. 位测试 在很多应用中需要知道一个变量的状态。例如某一运算为:如果字符变量AA 的第二位为0时,变量BB清0;AA的第二位为1时,BB加10。这个运算要测试 变量AA的第二位。“按位与”运算规则,某位与1“与”,本位不变,与0“与”,本位变0。所以使测试位不变,其它位变0。如果被测试位是0,则整个运算结果是0;如被测试位为1,则整个结果为非0。通过判断结果是否为非0,就能测试需要的位。对上例可以用下面的程序实现: if(AA&0b00000100) BB=BB+10;else BB=0;

  38. 位操作应用实例 • 例4-3按键处理 • 例4-4加减计数 • 例4-5方波输出

  39. 例4-3按键处理 如图4-7所示的电路图,PC3口的按键每按一次,PD3口的发光管的状态改变一次。 图4-7 键控指示灯电路

  40. 按键不按下时,PC3为高电平;按下时,为低电平。闭合与断开的瞬间伴有一连串的抖动,抖动时间一般为5~10ms。按键不按下时,PC3为高电平;按下时,为低电平。闭合与断开的瞬间伴有一连串的抖动,抖动时间一般为5~10ms。

  41. 按键抖动影响的消除:每隔20ms检测一次按键的状态。按键抖动影响的消除:每隔20ms检测一次按键的状态。 • 检查是否按了一次键,可以检查高电平到低电平的变化,或低电平到高电平的变化。

  42. 下列程序段实现[例4-3]的功能。 bit j ; main() { DDRD=0xff; DDRC=0x00; j=PINC.3; while(1) {j=PINC.3; delay_ms(20); if((PINC.3==0) &&(j==1))} PORTD.3=! PORTD.3; }

  43. 例4-4加减计数 如图4-9所示的电路图,PD口的8个发光管显示一个8位的二进制数,j04按键每按一次,PD口显示的二进制数加1,j05按键每按一次,PD口显示的二进制数减1。 图4-9 键控计数电路

  44. 下列程序段实现[例4-4]的功能。 #include <mega16.h> #include <delay.h> bit p1,p2; void main( ) { PORTC=0xfe ; DDRC=0x0f ; PORTD=0xff ; DDRD=0xff ; while(1) {p1= PINC.4; p2= PINC.5; delay_ms(20); if( (PINC.4==0)&&(p1==1)) PORTD--; if( (PINC.5==0)&&(p2==1)) PORTD++; }; }

  45. 例4-5方波输出 如图4-10所示的电路图,由PD口的第五位输出方波,方波的高电平时间和低电平时间是相等的,如果高电平时间为Xms,则方波周期为2Xms,方波频率为P=1000/(2X)=500/X。 图4-10 方波信号发生电路及输出波形

  46. 下列程序段实现[例4-5]的功能。 #include <mega16.h> #include <delay.h> void main( ) { int x; DDRD=0xff ; x=500; while(1) { PORTD.5=1; delay_ms(x); PORTD.5=0; delay_ms(x);} } } 改变x的值,能改变方波的频率。

More Related