|
【练习】PIC 编程 - LED闪灯 (功力挑战)
[复制链接]
|
|
发表于 12-11-2007 05:38 PM
|
显示全部楼层
回复 #39 rothmans 的帖子
我不太会用,但它真的很好用,但我只能在lab用罢了,不能在家用。把你的circuit output拉拉下线去那个接去usb port的东西,然后在LABVIEW做个display和setting就能用了。 |
|
|
|
|
|
|
|
发表于 12-11-2007 06:12 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 12-11-2007 06:32 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 12-11-2007 06:50 PM
|
显示全部楼层
原帖由 pic 于 12-11-2007 03:31 PM 发表 
过关。
还有第二,第三题, 努力。。。
为什么只有Jason, Rothmans, 有情, 和乱水的Chan1314 参与?
其他人呢?为什么没有C 和PICBasic的范例?
也为什么没有人讨论怎样做第2,3题?
还有很 ...
Basic尝试过用Bascom,可是我倒觉得伸缩性不强,不好用,而且也很少人用
写MCU还是用ASM和C比较好 |
|
|
|
|
|
|
|
发表于 12-11-2007 07:23 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 12-11-2007 07:28 PM
|
显示全部楼层
原帖由 PenBrush 于 12-11-2007 05:34 PM 发表 
我是用 PIC 16F84A CCSC Compiler 的
不晓得为什么用16F628A 能 Compiler 没 error 但是却在Simulate时没有Output。。
以下是题目一。。。。题目2 & 3 。。。。先等等。。
http://rapidshare.com/fi ...
如你是用MPLAB simulate,记得要用正确的Device. |
|
|
|
|
|
|
|
发表于 12-11-2007 07:29 PM
|
显示全部楼层
原帖由 若有情 于 12-11-2007 06:50 PM 发表 
Basic尝试过用Bascom,可是我倒觉得伸缩性不强,不好用,而且也很少人用
写MCU还是用ASM和C比较好
胡说 !用 C 方便多咯!用 ASM 还需要知道好多东西。我之前是用 ASM 的,非常乱水。还是 C 好。除非你受到价钱,时间,空间或是编译器的束缚。不然建议别用 ASM. |
|
|
|
|
|
|
|
发表于 12-11-2007 07:40 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 12-11-2007 07:57 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 12-11-2007 09:23 PM
|
显示全部楼层
原帖由 chan1314 于 12-11-2007 07:57 PM 发表 
我count 从1 开始到2000 , (一个加delay 1 ms), 开始三个灯都亮
然后每十 ...
也可以的。 |
|
|
|
|
|
|
|
发表于 12-11-2007 10:19 PM
|
显示全部楼层
原帖由 rothmans 于 12-11-2007 07:29 PM 发表 
胡说 !用 C 方便多咯!用 ASM 还需要知道好多东西。我之前是用 ASM 的,非常乱水。还是 C 好。除非你受到价钱,时间,空间或是编译器的束缚。不然建议别用 ASM.
呵呵,说得也是,不过本身C语言基础不好,在努力练住 |
|
|
|
|
|
|
|
发表于 12-11-2007 10:23 PM
|
显示全部楼层
第2题的答案,不知对不对
http://rapidshare.com/files/69197172/INT1.HEX
ORG 0000H
MOV P1,#7
LJMP MAIN
;TIMER0 INTERUPT
;
ORG 000BH
MOV TH0,#D8H
MOV TL0,#F0H
DJNZ R0,CONT
MOV R0,#5
CPL P1.2
INC R1
MOV A,R1
CJNE A,#10,CONT ;500ms
MOV R1,#0
CPL P1.0
INC R2
MOV A,R2
CJNE A,#2,CONT ;1000ms
MOV R2,#0
CPL P1.1
;
CONT:
RETI
MAIN:
MOV TMOD,#00000001B ;TIMER MODE 1
MOV TH0,#D8H ;DELAY 10ms R4(5)*10ms=50ms
MOV TL0,#0F0H ;10ms/1us=10000 65536-10000=55536 (D8F0)
MOV R0,#5
SETB EA
SETB ET0
SETB TR0
;
WAIT:
JMP WAIT
;
END |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 12-11-2007 11:10 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 12-11-2007 11:23 PM
|
显示全部楼层
原帖由 若有情 于 12-11-2007 10:19 PM 发表 
呵呵,说得也是,不过本身C语言基础不好,在努力练住
老实说,我的 C 语言基础也不好,每次只会那些 printf("Hello World\n" ); 的东西 。
[ 本帖最后由 rothmans 于 28-7-2008 06:53 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 12-11-2007 11:26 PM
|
显示全部楼层
我才想到我的logic 有问题, 需要分多几个loop 才不会有问题,
因为其他的也能 %10 ==0 ....
算了。。。。 |
|
|
|
|
|
|
|
发表于 12-11-2007 11:30 PM
|
显示全部楼层
原帖由 <i>rothmans</i> 于 12-11-2007 11:23 PM 发表 <a href="http://chinese.cari.com.my/myforum/redirect.php?goto=findpost&pid=35394911&ptid=1030872" target="_blank"><img src="http://chinese.cari.com.my/myforum/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />
<br />
<br />
<img src="images/smilies/titter.gif" smilieid="31" border="0" alt="" /> 老实说,我的 C 语言基础也不好,而且也学了十多年<img src="images/smilies/shy.gif" smilieid="30" border="0" alt="" /> 。每次只会那些 printf("Hello World\n" ); 的东西<img src="images/smilies/tongue.gif" smilieid="8" border="0" alt="" /> 。 <br />
1+ 年? 介意透露都少岁了吗???   |
|
|
|
|
|
|
|
发表于 12-11-2007 11:58 PM
|
显示全部楼层
原帖由 pic 于 10-11-2007 10:07 AM 发表 
这是给有心学PIC MCU的练习功课, 有兴趣的网友可以挑战或试试看... (写成的有加分奖励。)
条件:
1. MCU: PIC 16F628A / 16F877A
2. Clock: 4MHz~20Mhz
3. LED1,LED2,LED3, 分别接在Port B.0, B ... - #include <DS89C4xx.h>
- #define ON 0
- #define OFF 1
- // LED
- sbit LED1 = P2^0;
- sbit LED2 = P2^1;
- sbit LED3 = P2^2;
- void SysInit (void);
- void Delay (unsigned int milisec);
- void LedBlinking (unsigned char led, unsigned int onTime, unsigned int offTime);
- unsigned int led1Counter = 0;
- unsigned int led2Counter = 0;
- unsigned int led3Counter = 0;
- unsigned int led1Temp = 0;
- unsigned int led2Temp = 0;
- unsigned int led3Temp = 0;
- unsigned int led1OnTime = 0;
- unsigned int led1OffTime = 0;
- unsigned int led2OnTime = 0;
- unsigned int led2OffTime = 0;
- unsigned int led3OnTime = 0;
- unsigned int led3OffTime = 0;
- void main (void)
- {
- TA = 0xAA;
- TA = 0x55;
- EWT = 0;
- SysInit ();
- LedBlinking (1, 500, 500);
- LedBlinking (2, 500, 500);
- LedBlinking (3, 500, 500);
- Delay (10000);
- LedBlinking (1, 500, 500);
- LedBlinking (2, 1000, 1000);
- LedBlinking (3, 50, 50);
- Delay (10000);
- LedBlinking (1, 50, 950);
- LedBlinking (2, 300, 1700);
- LedBlinking (3, 10, 90);
- Delay (10000);
- while (1);
- }
- void SysInit (void)
- {
- P0 = 0xFF; //port initialization
- P1 = 0xFF;
- P2 = 0xFF;
- P3 = 0xFF;
- PMR = 0x83; //use on chip XRAM
- CKMOD = 0x38; //timer run at x 1 mode
- TMOD = 0x21; //timer 1 8 bits auto reload, timer 0 16 bits manual reload
- T2CON = 0x00; //timer 2 16bits auto reload
- RCAP2H = 0xA9; //timer 2 high byte
- RCAP2L = 0x9A; //timer 2 low byte : total = 1 ms
- TR2 = 1; //start timer 2
- IE = 0xA0; //enable global interrupt, timer 2 interrupt
- }
- void Delay (unsigned int milisec)
- {
- unsigned int i;
- for (i = 1; i <= milisec; i++)
- {
- TH0 = 0xA9;
- TL0 = 0x9A;
- TR0 = 1;
- while (!TF0);
- TF0 = 0;
- TR0 = 0;
- }
- }
- void T2ISR (void) interrupt 5 using 1
- {
- led1Counter ++;
- led2Counter ++;
- led3Counter ++;
- if (led1Counter >= led1Temp)
- {
- led1Counter = 0;
- LED1 = !LED1;
- if (LED1 == ON)
- led1Temp = led1OnTime;
- else
- led1Temp = led1OffTime;
- }
- if (led2Counter >= led2Temp)
- {
- led2Counter = 0;
- LED2 = !LED2;
- if (LED2 == ON)
- led2Temp = led2OnTime;
- else
- led2Temp = led2OffTime;
- }
- if (led3Counter >= led3Temp)
- {
- led3Counter = 0;
- LED3 = !LED3;
- if (LED3 == ON)
- led3Temp = led3OnTime;
- else
- led3Temp = led3OffTime;
- }
- TF2 = 0;
- }
- void LedBlinking (unsigned char led, unsigned int onTime, unsigned int offTime)
- {
- if (led == 1)
- {
- led1OnTime = onTime;
- led1OffTime = offTime;
- led1Counter = 0;
- LED1 = OFF;
- led1Temp = offTime;
- }
- else if (led == 2)
- {
- led2OnTime = onTime;
- led2OffTime = offTime;
- led2Counter = 0;
- LED2 = OFF;
- led2Temp = offTime;
- }
- else if (led == 3)
- {
- led3OnTime = onTime;
- led3OffTime = offTime;
- led3Counter = 0;
- LED3 = OFF;
- led3Temp = offTime;
- }
- else{}
- }
复制代码 我的答案。用c写。compiler = keil c51
一开始解第一题。
10秒过后会跳去第二题。
10 秒过后会在跳去第三题。
忘了讲, 这个是给c51的。
pic也是大同小异。
这个solution应该不是optimum solution. 可能有更好的。
[ 本帖最后由 fritlizt 于 13-11-2007 12:03 AM 编辑 ] |
评分
-
查看全部评分
|
|
|
|
|
|
|

楼主 |
发表于 13-11-2007 09:14 AM
|
显示全部楼层
原帖由 若有情 于 12-11-2007 10:23 PM 发表 
第2题的答案,不知对不对
对,可以。 |
|
|
|
|
|
|
|

楼主 |
发表于 13-11-2007 09:17 AM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 13-11-2007 09:24 AM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|