rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <reg552.h>
//sfr P1 = 0x90;
bdata unsigned int registr; //16bitu pac typ int
bdata unsigned char pomoc; //pomocna promenna
//bdata unsigned int pomoc;
data unsigned char gr,y,i,s;
xdata unsigned char hist[256];
data bit D;
sbit Q16 = pomoc^7; // vyznamejsi bity dole (big indian)
sbit Q14 = pomoc^5;
sbit Q13 = pomoc^4;
sbit Q11 = pomoc^2;
//inicializace
void init(){
registr = 0x8888;
y = 0;
P1 = 0x00;
s = 0;
for(i = 0; i < 255; i++) {
hist[i]=0;
};
hist[255]=0;
}
// generator
unsigned char genr() {
pomoc = registr>>8;
registr += registr;
if ((Q16^Q14^Q13^Q11)==1)
registr|=0x01;
gr = registr;
return(gr);
}
// filtr
unsigned char filtr(unsigned char x){
// gr = 0.25*x + 0.75*y;
gr = (x>>2) + (y>>1)+(y>>2);
y = gr;
return(gr);
}
// mereni cetnosti
void cetnost(){
hist[gr]++;
if(hist[gr] == 255) {
s = 1;
}
}
// vykresleni
void paint(){
P1 = 0xFF;
P1 = 0x00;
P1 = 0xFF;
P1 = 0x00;
for(i = 0; i < 255; i++)
{
P1 = hist[i];
}
P1 = hist[i];
}
void main()
{ init();
while(1) {
gr = genr();
gr = filtr(gr);
P1 = gr;
cetnost();
if(s == 1){
while(1){
paint();
}
}
}
}