MCU 8051 IDE: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Řádek 33: | Řádek 33: | ||
[[Soubor:RD2kit_08.jpg|400px]] | [[Soubor:RD2kit_08.jpg|400px]] | ||
{| | |||
|- | |||
| | |||
<source lang="asm"> | <source lang="asm"> | ||
start: | start: | ||
mov A,#01010101b | |||
mov P3,A | mov P3,A | ||
acall delay | acall delay | ||
Řádek 47: | Řádek 49: | ||
sjmp start | sjmp start | ||
delay: mov R0,#01h | delay: mov R0,#01h ; 108 ms | ||
skok1: mov R1,# | skok1: mov R1,#100 | ||
skok2: mov R2,# | skok2: mov R2,#250 | ||
skok: DJNZ R2,skok | skok: DJNZ R2,skok | ||
DJNZ R1,skok2 | DJNZ R1,skok2 | ||
DJNZ R0,skok1 | DJNZ R0,skok1 | ||
ret | ret | ||
end | end | ||
</source> | </source> | ||
| | |||
<source lang="c"> | |||
#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); | |||
} | |||
} | |||
</source> | |||
|- | |||
|} | |||
=== Read from Ports === | === Read from Ports === |
Verze z 5. 5. 2013, 07:08
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 |
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,#01h ;podprogram zpoždění
skok1: mov R1,#01h
skok2: mov R2,#01h
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++);
}
}
}
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;
}
}
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