关于AVR单片机的问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 04:54:08
最近刚刚接触AVR,看了一些书,有些问题还是弄不明白,请大家指教。

这是一个led的最简单程序

#include "iom128v.h"

/*延时函数*/
void delay_ms(unsigned char i) {

unsigned char a, b; 这里面设置位有符号的变量也可以吗?
for (a = 0; a < i; a++) { 这里的a不是一个字符型变量吗?这里不应该用整型变量吗?
for (b = 1; b; b++);
}
}

/*IO口初始化函数*/
void io_init(void) {

DDRA = 0x00; /*方向输入 */ 方向输入不明白
PORTA = 0xFF; /*打开上拉 */ 上拉我知道基本的意思,但具体打开是什么意思?
DDRB = 0xFF; /*方向输出 */
PORTB = 0xFF; /*高电平 */ 高电平是不是意思给led供电,使它亮?还是不让它亮?
DDRC = 0x00; /*不用的IO口建议设置为输入带上拉 */ 这就更不懂为什么了
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
DDRF = 0x00;
PORTF = 0xFF;
DDRG = 0x00;
PORTG = 0xFF;
}

void main(void) {

unsigned char i;

io_init(); 必须每次都要重新赋值吗?
while (1) {
for (i = 0; i < 8; i ++) {
PORTB = ~(1 << i); 这里面意思是让PORTB循环每一位都为0,那么就是说,是零的时候led才亮,也即是低电平吧

那么这8个都是L

unsigned char a, b; 这里面设置位有符号的变量也可以吗?------可以,但一般没这么用的,影响编译效率,会占ROM空间的

for (a = 0; a < i; a++) { 这里的a不是一个字符型变量吗?这里不应该用整型变量吗?--- 符型变量(0--255),是可以表示数值的

DDRA = 0x00; /*方向输入 */ 方向输入不明白
PORTA = 0xFF; /*打开上拉 */ 上拉我知道基本的意思,但具体打开是什么意思?
DDRB = 0xFF; /*方向输出 */
PORTB = 0xFF; /*高电平 */ 高电平是不是意思给led供电,使它亮?还是不让它亮?
DDRC = 0x00; /*不用的IO口建议设置为输入带上拉 */ 这就更不懂为什么了----------明显的基本知识不够,应该静下心来读书。

PORTB = ~(1 << i); 这里面意思是让PORTB循环每一位都为0,那么就是说,是零的时候led才亮,也即是低电平吧

那么这8个都是Led是接在PORTB端口上的吧,一个端口最多支持8个led吗?如果有9个led怎么办-------硬件知识也欠缺,最好先从51学起。模电数电也看看。C语言也要学学。

嗯……你可以先看看关于ATMEGA8单片机的中文资料,相信你会从中了找到答案,如果不好找,我可以发一份给你。

在看单片机手册的基础上,找本C51程序设计的书看看吧,有些很基础的东西还有待于提高。