MCU 8051 IDE: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Řádek 275: | Řádek 275: | ||
} | } | ||
} | } | ||
</source> | |||
=== Two 7-segment === | |||
[[Soubor:MCU-8051-IDE_2-7segment.gif|400px|right]] | |||
<source lang="asm"> | |||
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 | |||
</source> | </source> |
Verze z 23. 5. 2013, 19:02
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++);
}
}
}
|
#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