MCU 8051 IDE: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Řádek 193: | Řádek 193: | ||
[[Soubor:MCU-8051-IDE_09.gif|400px|right]] | [[Soubor:MCU-8051-IDE_09.gif|400px|right]] | ||
<source lang=" | <source lang="asm"> | ||
MOV TMOD,#00000001B | MOV TMOD,#00000001B | ||
MOV TH0,#00H | MOV TH0,#00H |
Verze z 12. 6. 2012, 19:18
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
org 0 ;pseudoinstrukce umistujici program do pameti programu pocitace adresou 000h
start:
mov A,#01010101b
mov P3,A
acall delay
mov A,#10101010b
mov P3,A
acall delay
sjmp start
delay: mov R0,#01h
skok1: mov R1,#01h
skok2: mov R2,#01h
skok: DJNZ R2,skok
DJNZ R1,skok2
DJNZ R0,skok1
ret
end
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
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