基于Proteus的AVR单片机C语言程序设计与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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端口的应用仿真效果图