关于AVR单片机的问题
最近刚刚接触AVR,看了一些书,有些问题还是弄不明白,请大家指教。这是一个led的最简单程序#include"iom128v.h"/*延时函数*/voiddelay_ms...
最近刚刚接触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个都是Led是接在PORTB端口上的吧,一个端口最多支持8个led吗?如果有9个led怎么办
这个是否和一个字节8位,所以一个端口最多就支持8个led?
delay_ms(200);
}
}
}
大家看我问的问题就知道我对单片机的概念是很不清楚。不知道有没有适合我这样的从最基础的概念讲起的书,我在网上看到过一本c51的,程序也是汇编,但他讲的通俗易懂,找了很久也没找到AVR C语言编程 通俗易懂的书。大家都是以前学过c51所以再学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个都是Led是接在PORTB端口上的吧,一个端口最多支持8个led吗?如果有9个led怎么办
这个是否和一个字节8位,所以一个端口最多就支持8个led?
delay_ms(200);
}
}
}
大家看我问的问题就知道我对单片机的概念是很不清楚。不知道有没有适合我这样的从最基础的概念讲起的书,我在网上看到过一本c51的,程序也是汇编,但他讲的通俗易懂,找了很久也没找到AVR C语言编程 通俗易懂的书。大家都是以前学过c51所以再学AVR就好上手,而我以前从未接触过单片机。 展开
4个回答
展开全部
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语言也要学学。
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程序设计的书看看吧,有些很基础的东西还有待于提高。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果要用AT128的话,建议你还是稍微学下单片机,特别是要懂得AVR那些寄存器的配置,如果你懂了配置,那么程序上就容易多了,因为使用AVR内部的AD就只是对寄存器进行配置,然后就直接调用一些函数就可以了,液晶屏的话用TFT彩屏吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询