4.3 PA端口的应用
PA端口为8位双向I/O口,每一位口线都能独立地用做输入/输出线。设计程序:按下按钮时,PA1控制红色发光二极管点亮;否则,PA0控制绿色发光二极管点亮。
1.硬件设计
在桌面上双击图标,打开ISIS 7 Professional窗口。单击菜单“File”→“New Design”,新建一个DEFAULT模板,保存文件名为“PA端口的应用.DSN”。在器件选择按钮中单击“P”按钮,或执行菜单“Library”→“Pick Device/Symbol”,添加如表4-22所示的元件。注意在ISIS中单片机的型号必须与CodeVisionAVR中选择的型号完全一致。
表4-22 PA端口的应用所用元件
先在ISIS原理图编辑窗口中放置元件,再单击工具箱中的元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。然后放置好元件,布好线。最后左键双击各元件,设置相应元件参数,由此便完成电路原理图的设计了,如图4-9所示。
图4-9 PA端口的应用电路原理图
2.程序设计
1)设计分析从原理图中可以看出,PA端口的PA0和PA1用做输出端口,PA4用做输入端口,因此PA端口的DDRA设置为“0x0F”,即设置PA端口的低4位作为输出方式,高4位作为输入方式。程序流程如图4-10所示。
图4-10 PA端口的应用程序流程图
2)源程序
/**************************************************** File name: PA端口的应用.C Chip type: ATmega16 Clock frequency: 8.0MHz ****************************************************/ #include "mega16.h" #define uchar unsigned char #define uint unsigned int //定义开关及LED与PA端口的连接 #define redLED PORTA.0 #define greenLED PORTA.1 #define button PINA.4 void delay(uint k) { uint m,n; for(m=0;m<k;m++) { for(n=0;n<1140;n++); } } void main(void) { DDRA=0x0F; //PA端口低4位为输出方式,高4位为输入方式 PORTA=0xFF; //PA端口输出全部为“1” while(1) { if(button==0) //如果按下了按钮开关 { redLED=0; greenLED=1; delay(1000); } else { redLED=1; greenLED=0; } } }
3.调试与仿真
1)HEX或COFF文件的生成
(1)打开AVR单片机程序编译软件CodeVisionAVR,单击File菜单中的“NEW”项,在弹出的“Create New File”对话框中选择“Project”选项,再单击“OK”按钮,然后弹出“Confirm”对话框,在此对话框中选择“NO”。
(2)输入新建项目名,单击“OK”按钮,在弹出的“Configure Project”对话框中单击“Cancel”按钮,不采用CodeVisionAVR项目向导,由用户直接新建项目。
(3)单击File菜单中的“NEW”项,在弹出的“Create New File”对话框中选择“Source”选项,再单击“OK”按钮,打开一个空的文本编辑窗口,在此窗口中输入程序,创建新的源程序“PA端口的应用.C”文件。
(4)执行菜单命令“Project”→“Configure”,将弹出“Configure Project”对话框。在此对话框的“Files”选项卡的“Input files”栏中单击“ADD”按钮,添加刚创建的源程序“PA端口的应用.C”文件,再单击“OK”按钮。
(5)执行菜单命令“Project”→“Configure”,将弹出“Configure Project”对话框。在此对话框的“C Compiler”选项卡中设置Clock为8MHz,设置Chip为ATmega16。
(6)单击Project菜单中的“Build All”项,或在工具条中单击图标,进行源程序的编译。若程序编译成功将生成“PA端口的应用.HEX”和“PA端口的应用.COFF”文件。
2)具体的调试与仿真
(1)在Proteus ISIS编辑窗口中单击鼠标右键将ATmega16单片机选中并单击鼠标左键,弹出“Edit Component”对话框,在此对话框的“Program File”栏中单击图标,选择先前用CodeVisionAVR生成的“PA端口的应用.HEX”文件;在CKOPT栏中选择“(0)Programmed”,使外接晶体振荡器的最大频率达16MHz;在CKSEL Fuses中选择“(0111)Ext.RC 3.0MHz-8.0MHz”,使ATmega16可接外部频率为3~8MHz范围的晶体振荡器;在SUT Fuses中选择“01”,表示可连接的外部晶体为石英振荡器;在Advanced Properties中将第二个框里的内容“(Default)”改为8MHz的时钟频率。ATmega16的属性设置具体如图4-11所示。
图4-11 ATmega16的属性设置
(2)在Proteus ISIS编辑窗口的“File”栏的下拉菜单下选择“Save Design”选项,保存设计,生成“PA端口的应用.DSN”文件。
(3)在Proteus ISIS编辑窗口下单击或在“Debug”菜单下选择“”,可看见在未按下按钮时,仿真效果如图4-12(a)所示,绿色发光二极管亮;按下按钮时,仿真效果如图4-12(b)所示,红色发光二极管亮。
图4-12 PA端口的应用仿真效果图