查看: 1195|回复: 0
打印 上一主题 下一主题

IO口及其串口检测

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-29 20:15:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************************************************
实现功能:ATMGEA16单片机IO口及其串口检测
使用芯片:ATMEGA16
晶振:8.00MHZ
编译环境:ICC AVR
作者:zhangxinchunleo
网站:www.ourhc.cn
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
*********************************************************************/
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char //宏定义字符型
#define uint unsigned int   //宏定义字整行
uchar KEY=0;
/********************************************************************
                      串口初始化子程序
*********************************************************************/
void Uart_Init(void)
{
    UCSRB  =  0x00;     //disable while setting baud rate
    UCSRA  =  0x00;     //Bit1为1则倍速发送
    UCSRC  =  0x86;  
    UBRRL  =  0x33;     //波特率:9600 Bps
    UBRRH  =  0x00;     //误差率:0.156%
    UCSRB  =  0x18;  
}
/********************************************************************
                      串口接收字节子程序
*********************************************************************/
uchar Getchar(void)
{
   while(!(UCSRA& (1<<RXC)));
   return UDR;
}
/********************************************************************
                     串口发送字节子程序
*********************************************************************/
void Putchar(uchar c)
{
   while (!(UCSRA&(1<<UDRE)));
   UDR=c;
}
/********************************************************************
                     N ms延时函数
*********************************************************************/
void delay_nms(uint n)
  {
   uint j,k;
   for (j=0;j<n;j++)
   {
    for (k=0;k<1140;k++);//1ms延时
   }   
  }
/********************************************************************
                     初始化I/O
*********************************************************************/
void Init_IO(void)
{
//设置A口为输出
DDRA=0xFF;
PORTA=0xFF;
//设置B口为输出
DDRB=0xFF;
PORTB=0xFF;
//设置C口为输出
DDRC=0xFF;
PORTC=0xFF;
//设置D口为输出
DDRD=0XFF;
PORTD=0xFF;
}
/********************************************************************
                            主函数
*********************************************************************/
void main(void)
{
   uchar i=0;//定义串口接收变量
   Uart_Init();//初始化串口
   Init_IO();//初始化IO口
   /**********所有IO口闪烁两次***********/
   PORTA=0x00;
   PORTB=0x00;
   PORTC=0x00;
   PORTD=0x00;
   delay_nms(1000);//延时1秒
   PORTA=0xFF;
   PORTB=0xFF;
   PORTC=0xFF;
   PORTD=0xFF;
   delay_nms(1000);//延时1秒
   PORTA=0x00;
   PORTB=0x00;
   PORTC=0x00;
   PORTD=0x00;
   delay_nms(1000);//延时1秒
   PORTA=0xFF;
   PORTB=0xFF;
   PORTC=0xFF;
   PORTD=0xFF;
    /**********闪烁结束***********/
   while(1)
   {
     i=Getchar();  //等待接收数据
      if (i!=0)    //如果接收到数据返回下列两个值
      {
         i=0;//接收数据标志清零
         Putchar(0x0a);//返回0X0A
         Putchar(0x0d);//返回0X0D
      }
   }
}





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表