|
发表于 2012-10-30 17:27:29
|
显示全部楼层
taocongrong 发表于 2012-10-29 17:04 ![](static/image/common/back.gif)
还是一样的,给你说下现象吧!
#include
#include
我来解答一下吧
释疑程序一
#include <iom162v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
void init(void)//这个函数有个小问题,见释疑程序二
{
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
}
void main() {
//下面3行与init()函数相同,可以删除
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
//整个程序里没有 init()函数 !
while(1) {
/**************************************************
你这里设置PORTA=0x00;即PA口为低电平,PA口自然是低电平了;
你可以改为下面3行,即PA,PB和PC均为低电平试试看!
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
**************************************************/
PORTC=0Xff;
PORTA=0X00;
PORTB=0XFF;
}
}
上面这个函数出现了PORTA是低电平,而PORTC 和PORTB是高电平 ,奇怪吧 ,我单片机买了两家了 都是这样的
释疑程序二:
#include <iom162v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
void init(void)
{
/********************************************************
AVR单片机配置I/O口应该将
【方向控制寄存器DDRx和数据寄存器PORTx同时设置】,可改为:
DDRA=0XFF;
PORTA=0xff;
DDRB=0XFF;
PORTB=0xff;
DDRC=0XFF;
PORTC=0xff;//3个端口均为高电平
***********************下面3行无用矣***********************/
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
}
void main()
{
init();//在进入【死循环】之前init()函数已经被调用了,你怎么说没有呢?!
while(1)
{ //这里就是I/O口输出状态了,谁【=0x00】,谁就是【低电平】
PORTA=0X00;
PORTB=0XFF;
PORTC=0X00; //我修改了~~~~~
}
}
这个代码出现PORTB为低电平,PORTC位低电平,相当于无法调用init()这个函数!
//上面的程序你可以重新编译下,I/O口应该是【PA口和PC口为低电平;PB口为高电平】就对了!
另外,再发个小测试程序给你吧.如果还有不会的或不懂得可+QQ【266AA51F】,你懂得~~~~~要注明是坛里的哦~~~~~一般不加人滴
#include <iom162v.h>
#include <macros.h>
#define uint unsigned int
void Delay_ms(uint xms)//延时函数
{
int i,j;
for(i=0;i<xms;i++)
{
for(j=0;j<1140;j++) ;
}
}
void port_init (void)//端口初始化函数
{
DDRA=0XFF;
PORTA=0xff;
DDRB=0XFF;
PORTB=0xff;
DDRC=0XFF;
PORTC=0xff;
}
void main (void)//主函数
{
port_init();//不解释~~~~~你懂得 文方~~~~~
while(1)//哈哈,木技术含量的跑马灯~~~~~从PA0~PA7---->PB0~PB0---->PC0~PC7反复循环~~~~~
{
PORTA=0xFE;
Delay_ms(500);
PORTA=0xFD;
Delay_ms(500);
PORTA=0xFB;
Delay_ms(500);
PORTA=0xF7;
Delay_ms(500);
PORTA=0xEF;
Delay_ms(500);
PORTA=0xDF;
Delay_ms(500);
PORTA=0xBF;
Delay_ms(500);
PORTA=0x7F;
Delay_ms(500);
PORTB=0xFE;
Delay_ms(500);
PORTB=0xFD;
Delay_ms(500);
PORTB=0xFB;
Delay_ms(500);
PORTB=0xF7;
Delay_ms(500);
PORTB=0xEF;
Delay_ms(500);
PORTB=0xDF;
Delay_ms(500);
PORTB=0xBF;
Delay_ms(500);
PORTB=0x7F;
Delay_ms(500);
PORTC=0xFE;
Delay_ms(500);
PORTC=0xFD;
Delay_ms(500);
PORTC=0xFB;
Delay_ms(500);
PORTC=0xF7;
Delay_ms(500);
PORTC=0xEF;
Delay_ms(500);
PORTC=0xDF;
Delay_ms(500);
PORTC=0xBF;
Delay_ms(500);
PORTC=0x7F;
Delay_ms(500);
}
}
=你的板子,哈哈~~~~~ |
|