Příklady s časovým zpožděním v C pro 8051: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
Bez shrnutí editace |
||
Řádek 118: | Řádek 118: | ||
} | } | ||
} | } | ||
</source> | |||
==Automatická pračka== | |||
===Program pro automatickou pračku=== | |||
'''Blokové schéma:''' [ftp://obelix.sps-pi.cz/n/janousek/mikroLAB/30_SES%20sestavy/SES03%20Pracka/pracka.JPG SES03 Pračka] | |||
<source pracka"asm"> | |||
$smod51 | |||
org 0 | |||
start: mov P3,#00h | |||
vypust: | |||
setb P3.2 ; zapne cerpadlo | |||
jnb P1.0,$ ; test MIN hladiny vody | |||
clr P3.2 ; vypne cerpadlo | |||
napust: | |||
mov P3,#00000011b ; zapne 1. a 2. ventil | |||
jb P1.1,$ ; test MAX hladiny vody ceka na log.„0“ | |||
mov P3,#00000000b ; vypne ventily | |||
ohrev: | |||
setb P3.3 ; zapne ohrev | |||
jb P1.2,$ ; test na dosazeni teploty ceka na log.„0“ | |||
clr P3.3 ; vypne ohrev | |||
mov r3,#00h | |||
toc: | |||
mov P3,#00110000b | |||
acall zpozd | |||
mov P3,#01100000b | |||
acall zpozd | |||
mov P3,#11000000b | |||
acall zpozd | |||
mov P3,#10010000b | |||
acall zpozd | |||
jnb P1.3,toc | |||
inc r3 | |||
cjne r3,#05h,toc | |||
mov P3,#00h | |||
vypust1: | |||
setb P3.2 ; zapne cerpadlo | |||
jnb P1.0,$ ; test MIN hladiny vody ceka na log. „1“ | |||
clr P3.2 ; vypne cerpadlo | |||
sjmp konec | |||
zpozd: mov r6,#0ffh | |||
zpozd1: | |||
mov r7,#0ffh | |||
djnz r7,$ ;dekrementuje R7 dokud není log. „0“ | |||
djnz r6, zpozd1 | |||
ret ; návrat z podprogramu | |||
konec: | |||
mov P3,#00h | |||
sjmp start | |||
end | |||
</source> | </source> |
Verze z 29. 4. 2011, 10:41
zdroj informací: http://what-when-how.com/8051-microcontroller/data-types-and-time-delay-in-8051-c/
Unsigned char
example 7-1
#include <reg51.h>
void main (void)
{
unsigned char z;
for (z=0;z<=255;z++)
P1=z;
}
example 7-2
#include <reg51.h>
void main (void)
{
unsigned char mynum [] = "012345ABCD";
unsigned char z;
for (z=0;z<=10;z++)
P1 = mynum[z];
}
example 7-3
#include <reg51.h>
void main (void)
{
for (;;) //opakovani cyklu
P1=0x55;
P1=0xAA;
}
Unsigned char
example 7-4
#include <reg51.h>
void main (void)
{
char mynum [] = {+1,-1,+2,-2,+3,-3,+4,-4};
unsigned char z;
for (z=0;z<=8;z++)
P1 = mynum[z];
}
example 7-5
#include <reg51.h>
sbit MYBIT = P1^0; //definování výstupního bitu
void main (void)
{
MYBIT = 0;
MYBIT = 1;
}
example 7-5-2
#include <reg51.h>
sbit MYBIT = P1^0; //definování výstupního bitu
void main (void)
{
MYBIT = ~MYBIT;
}
example 7-5-3
#include <reg51.h>
sbit MYBIT = P1^0; //definování výstupního bitu
void main (void)
{
unsigned int z;
for (z=0;z<=5;z++)
{
MYBIT = 0;
MYBIT = 1;
}
}
Automatická pračka
Program pro automatickou pračku
Blokové schéma: SES03 Pračka
$smod51
org 0
start: mov P3,#00h
vypust:
setb P3.2 ; zapne cerpadlo
jnb P1.0,$ ; test MIN hladiny vody
clr P3.2 ; vypne cerpadlo
napust:
mov P3,#00000011b ; zapne 1. a 2. ventil
jb P1.1,$ ; test MAX hladiny vody ceka na log.„0“
mov P3,#00000000b ; vypne ventily
ohrev:
setb P3.3 ; zapne ohrev
jb P1.2,$ ; test na dosazeni teploty ceka na log.„0“
clr P3.3 ; vypne ohrev
mov r3,#00h
toc:
mov P3,#00110000b
acall zpozd
mov P3,#01100000b
acall zpozd
mov P3,#11000000b
acall zpozd
mov P3,#10010000b
acall zpozd
jnb P1.3,toc
inc r3
cjne r3,#05h,toc
mov P3,#00h
vypust1:
setb P3.2 ; zapne cerpadlo
jnb P1.0,$ ; test MIN hladiny vody ceka na log. „1“
clr P3.2 ; vypne cerpadlo
sjmp konec
zpozd: mov r6,#0ffh
zpozd1:
mov r7,#0ffh
djnz r7,$ ;dekrementuje R7 dokud není log. „0“
djnz r6, zpozd1
ret ; návrat z podprogramu
konec:
mov P3,#00h
sjmp start
end