这是从MCS51转到AVR后的第一个单片机程序,该程序是控制RB-101 机器人主板上的四个LED循环的闪烁。
其实用C语言编写单片机的好处就在于此,更换硬件本身并不需要花太多的时间去了解其中汇编命令的改变,只需要了解其中一些特殊保留字的改变。
注:AVR单片机是Reduced Instruction Set Computer(RISC)精简指令集计算机(类似AMD的CPU结构)
MCS51是Complex Instruction Set Computer(CISC)复杂指令集计算机(类似Intel的CPU结构)
1
//
RB-101 机器人4小灯测试程序
2 // 2005年6月25日 彭斌
3
4 #include < mega8515.h > // 头文件
5 #include < delay.h > // 延时头程序调用,该文件已经存在于CodeVisionAVR里 ,安装后就有。
6 #include < stdio.h > // 一些常用函数的头文件调用
7
8 // 主函数入口
9 void main( void )
10 {
11 // DDRxn 定义引脚方向,“1” 为输出,“0”为输入。
12
13 // 由于RB-101主电路板上四小灯所接引脚为PORTB.6 PORTB.7 PORTC.6 PORTC.7
14 // 因此,需要给PB、PC口的6、7位即DDRB.6、DDRB.7、DDRC.6、DDRC.7定义为电平输出
15
16 DDRB = 0B11000000; // 这里使用二进制赋值,同时DDRxn也支持位赋值,例:DDRB.6=1
17 DDRC = 0B11000000;
18
19 // 执行一个死循环,连续使小灯闪动.
20 while ( 1 )
21 {
22 PORTB = 0B11000000; // PB6、PB7输出高电平。这里使用二进制赋值,同时DDRxn也支持位赋值,例:PORTB.6=1
23 PORTC = 0B11000000; // PC6、PC7输出高电平
24
25 // 调用延时程序
26 delay_ms( 1000 ); // 延时1000毫秒,也就是1S
27
28 PORTB = 0B00000000; // PB6、PB7输出低电平
29 PORTC = 0B00000000; // PC6、PC7输出低电平
30
31 // 再次调用延时程序
32 delay_ms( 1000 ); // 延时1000毫秒,也就是1S
33
34 }
35
36 }
2 // 2005年6月25日 彭斌
3
4 #include < mega8515.h > // 头文件
5 #include < delay.h > // 延时头程序调用,该文件已经存在于CodeVisionAVR里 ,安装后就有。
6 #include < stdio.h > // 一些常用函数的头文件调用
7
8 // 主函数入口
9 void main( void )
10 {
11 // DDRxn 定义引脚方向,“1” 为输出,“0”为输入。
12
13 // 由于RB-101主电路板上四小灯所接引脚为PORTB.6 PORTB.7 PORTC.6 PORTC.7
14 // 因此,需要给PB、PC口的6、7位即DDRB.6、DDRB.7、DDRC.6、DDRC.7定义为电平输出
15
16 DDRB = 0B11000000; // 这里使用二进制赋值,同时DDRxn也支持位赋值,例:DDRB.6=1
17 DDRC = 0B11000000;
18
19 // 执行一个死循环,连续使小灯闪动.
20 while ( 1 )
21 {
22 PORTB = 0B11000000; // PB6、PB7输出高电平。这里使用二进制赋值,同时DDRxn也支持位赋值,例:PORTB.6=1
23 PORTC = 0B11000000; // PC6、PC7输出高电平
24
25 // 调用延时程序
26 delay_ms( 1000 ); // 延时1000毫秒,也就是1S
27
28 PORTB = 0B00000000; // PB6、PB7输出低电平
29 PORTC = 0B00000000; // PC6、PC7输出低电平
30
31 // 再次调用延时程序
32 delay_ms( 1000 ); // 延时1000毫秒,也就是1S
33
34 }
35
36 }
由于是给我弟弟入门用的,所以添加了很多注释
相关操作的屏幕录像请在这里下载: RB-101-4LED