Příklady s časovým zpožděním v C pro 8051
(Rozdíly mezi verzemi)
Řádka 118: | Řádka 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, 12:41
zdroj informací: http://what-when-how.com/8051-microcontroller/data-types-and-time-delay-in-8051-c/
Obsah |
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