MCU 8051 IDE
(Rozdíly mezi verzemi)
(→7 segment - C (tab)) |
(→Runing Light) |
||
Řádka 115: | Řádka 115: | ||
sjmp loop ;skočí zpět k rotaci P1 | sjmp loop ;skočí zpět k rotaci P1 | ||
− | delay: mov R0,# | + | delay: mov R0,#1 ;podprogram zpoždění 125ms pro 11,059 MHz |
− | skok1: mov R1,# | + | skok1: mov R1,#226 |
− | skok2: mov R2,# | + | skok2: mov R2,#255 |
skok: djnz R2,skok | skok: djnz R2,skok |
Verze z 26. 5. 2013, 22:47
MCU 8051 IDE | |
popis: | Vývoj aplikace pro 8051 v asm nebo C |
vývojář | Martin Ošmera |
aktuální verze | 1.4 (2011) |
OS | Unix-like, Microsoft Windows, freeBSD |
typ softwaru | aplikační |
licence | GNU General Public License |
web | mcu8051ide.sf.net wiki |
Obsah |
Instalace programu
Založení nového projektu
Simulace programu
Example
Write to Port
start: mov A,#01010101b mov P3,A acall delay mov A,#10101010b mov P3,A acall delay sjmp start delay: mov R0,#01h ; 108 ms skok1: mov R1,#100 skok2: mov R2,#250 skok: DJNZ R2,skok DJNZ R1,skok2 DJNZ R0,skok1 ret end |
#include <at89x51.h> void _delay_ms(unsigned int msec) //for 11.0592Mhz crystal { unsigned int i,j; for(i=0;i<msec;i++) { for(j=0;j<110;j++); } } void main () { while(1) { P3 = 0x55; _delay_ms(100); // 100 ms P3 = 0xAA; _delay_ms(100); } } |
Read from Ports
org 0 ;pseudoinstrukce umistujici program do pameti programu pocitace adresou 000h start: mov A,#P1 mov P3,A sjmp start
Runing Light
org 0 ;pseudoinstrukce umistujici program od 00h mov P3,#11111110B ;0. bit na log "0" loop: mov A,P3 rlc A ;posun obsah A přes C doleva mov P3,A acall delay ;zavolá podprogram pro zpoždění 1s sjmp loop ;skočí zpět k rotaci P1 delay: mov R0,#1 ;podprogram zpoždění 125ms pro 11,059 MHz skok1: mov R1,#226 skok2: mov R2,#255 skok: djnz R2,skok djnz R1,skok2 djnz R0,skok1 ret end
Runing Light C
#include <at89x51.h> #define LED P2_3 void main() { int i; while(1) { if (LED) { LED = 0; } else { LED = 1; } { for(i=0;i<10000;i++); } } } |
#include <at89x51.h> #include <delay.h> void main() { while (1) { P1=0xff; _delay_ms(50); // 50 ms P1=0x00; _delay_ms(50); // 50 ms } } /* file delay.h contains: unsigned int i,j; void _delay_ms(unsigned int msec) // crystal 10 059 kHz { for(i=0;i<msec;i++) for(j=0;j<110;j++); } |
7 segment
MOV DPTR,#TAB ;ulozi adresu cislic do DPTR nastav: MOV R5,#0 ;nastaveni prvni cislice zobraz: MOV A,R5 ;presun cislice z R5 do A MOVC A,@A+DPTR ;vybere prislusnou hodnotu pro A MOV P3,A ;presum hodnoty na port INC R5 ;zvysi cislo v R5 o 1 CJNE R5,#10,zobraz SJMP nastav TAB: DB 0C0h,0F9H,0A4H,0B0H,99H ;0,1,2,3,4, DB 92H,82H,0F8H,80H,90H ;5,6,7,8,9, end
7 segment v2
mov R6,#10 START: djnz R6,NEXT mov R6,#10 mov R5,#0 NEXT: mov DPTR,#TAB mov A,R5 movc A,@A+DPTR mov P3,A inc R5 sjmp START TAB: DB 0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4, DB 92H,82H,0F8H,80H,90H ;5,6,7,8,9, end
7 segment - C
__sfr __at (0xB0) P3; #define DELAYTIME 15 //Defined delay time constant, originally 65000 unsigned int temp1; void delay(unsigned int temp)//Delay process { while(--temp); } void main() { P3=255; //led is off HGFEDCBA = "1" while(1) { P3=0Xc0; //0 HG = "1" OFF temp1=DELAYTIME; delay(temp1); P3=0XF9; //1 BC = "0" = ON temp1=DELAYTIME; delay(temp1); } }
7 segment - C (tab)
#include <at89x51.h> __code unsigned char out[16] = {0xC0,0xF9,0xA4,0xB0, //0,1,2,3 0x99,0x92,0x82,0xF8, //4,5,6,7 0x80,0x90,0x08,0x03, //8.9.A.B 0x46,0x21,0x06,0x0E};//C,D,E,F void main(void) { __data unsigned char i = 0; while (1) // program loop { P3 = out[i++]; if (i==16) i=0; } }
Two 7-segment
MOV DPTR,#TAB tens: MOV P0,#00000010B MOV R5,#01H units: MOV R3,#00H next: MOV A,R3 MOVC A,@A+DPTR MOV P2,A ACALL delay INC R3 CJNE R3,#10D,next MOV A,R5 MOVC A,@a+dptr MOV P0,A INC R5 CJNE R5,#11D,again SJMP tens again: SJMP units delay: MOV R2,#06D temp2: MOV R1,#255D temp1: MOV R0,#255D DJNZ R0,$ DJNZ R1,temp1 DJNZ R2,temp2 RET TAB: DB 00000010B ;0x02 0D DB 10011111B ;0x9F 1D DB 00100100B ;0x24 2D DB 00001100B ;0x1C 3D DB 10011000B ;0x98 4D DB 01001000B ;0x48 5D DB 01000000B ;0x40 6D DB 00011110B ;0x1E 7D DB 00000000B ;0x00 8D DB 00001000B ;0x0F 9D END
Counter
MOV TMOD,#00000001B MOV TH0,#00H MOV TL0,#00H SETB TR0 MOV DPTR,#TAB ;ulozi adresu cislic do DPTR nastav: MOV R5,#0 ;nastaveni prvni cislice zobraz: MOV A,R5 ;presun cislice z R5 do A MOVC A,@A+DPTR ;vybere prislusnou hodnotu pro A MOV P3,A ;presum hodnoty na port INC R5 ;zvysi cislo v R5 o 1 acall test CJNE R5,#10,zobraz SJMP nastav test: ; ACALL ZPOZD JNB P1.0,$ ;bit P1.0=0 skok na sebe sama ; ACALL ZPOZD JB P1.0,$ ;bit P1.0=1 skok na sebe sama ret ZPOZD: MOV R0,#05H SKOK: JNB TF0,$ CLR TF0 DJNZ R0,SKOK RET TAB: DB 0C0h,0F9H,0A4H,0B0H,99H ;0,1,2,3,4, DB 92H,82H,0F8H,80H,90H ;5,6,7,8,9, end