MCU 8051 IDE: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
|||
Řádek 99: | Řádek 99: | ||
</source> | </source> | ||
=== Runing Light C === | |||
<source lang="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++); | |||
} | |||
} | |||
} | |||
</source> | |||
=== 7 segment === | === 7 segment === |
Verze z 2. 5. 2013, 05:43
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
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