Selam Arkadaşlar;
PIC12F675 ile sürülen 74HC595'teki bütün portlardan 10Hz sabit frekans almak istiyorum.
Şeması ve Çalışma şekli (https://www.mediafire.com/view/xdprmetihs51wdx/WORK1_25FPS.gif/file)
#include <12F675.h>
#use delay(internal=4000000)
#fuses INTRC_IO, NOMCLR, NOBROWNOUT, NOPROTECT, NOCPD, NOPUT, NOWDT
unsigned int8 i=0, in_byte=255, out_byte=0, dutyQ0=50, dutyQ1=50, dutyQ2=50, dutyQ3=50, dutyQ4=50, dutyQ5=50, dutyQ6=50, dutyQ7=50;
const unsigned int8 t0_byte=195;
/*************** Timer0 Kesmesi****************/
#int_timer0
void timer0_kesme(){
unsigned int8 j=8;
set_timer0(t0_byte);
// Buton okuyan ve çıkış gönderen kısım
output_low(PIN_A4);
#asm
nop
#endasm
output_high(PIN_A4);
do{
j--;
/// 74165 SO'dan data oku ///////////////////////////////
if(input(PIN_A5)){
bit_set(in_byte,j);
}else{
bit_clear(in_byte,j);
}
////////////////////////////////////////////////
// 74595 DS'ye data yaz
output_bit(PIN_A1,bit_test(out_byte,j));
output_high(PIN_A0);
#asm
nop
#endasm
output_low(PIN_A0);
}while(j>0);
output_high(PIN_A2);
#asm
nop
#endasm
output_low(PIN_A2);
///////////////////////////////////////////////////
if(i<=dutyQ0 && dutyQ0!=0 || dutyQ0==100){
bit_set(out_byte,0);
}else if(i>dutyQ0 && dutyQ0!=100 || dutyQ0==0 ){
bit_clear(out_byte,0);
}
if(i<=dutyQ1 && dutyQ1!=0 || dutyQ1==100){
bit_set(out_byte,1);
}else if(i>dutyQ1 && dutyQ1!=100 || dutyQ1==0 ){
bit_clear(out_byte,1);
}
if(i<=dutyQ2 && dutyQ2!=0 || dutyQ2==100){
bit_set(out_byte,2);
}else if(i>dutyQ2 && dutyQ2!=100 || dutyQ2==0 ){
bit_clear(out_byte,2);
}
if(i<=dutyQ3 && dutyQ3!=0 || dutyQ3==100){
bit_set(out_byte,3);
}else if(i>dutyQ3 && dutyQ3!=100 || dutyQ3==0 ){
bit_clear(out_byte,3);
}
if(i<=dutyQ4 && dutyQ4!=0 || dutyQ4==100){
bit_set(out_byte,4);
}else if(i>dutyQ4 && dutyQ4!=100 || dutyQ4==0 ){
bit_clear(out_byte,4);
}
if(i<=dutyQ5 && dutyQ5!=0 || dutyQ5==100){
bit_set(out_byte,5);
}else if(i>dutyQ5 && dutyQ5!=100 || dutyQ5==0 ){
bit_clear(out_byte,5);
}
if(i<=dutyQ6 && dutyQ6!=0 || dutyQ6==100){
bit_set(out_byte,6);
}else if(i>dutyQ6 && dutyQ6!=100 || dutyQ6==0 ){
bit_clear(out_byte,6);
}
if(i<=dutyQ7 && dutyQ7!=0 || dutyQ7==100){
bit_set(out_byte,7);
}else if(i>dutyQ7 && dutyQ7!=100 || dutyQ0==7 ){
bit_clear(out_byte,7);
}
i++;
if(i==101) i=0;
}
void main(void)
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_16); // Timer0 ayarları yapılıyor
set_timer0(t0_byte); // TMR0 değeri belirleniyor
enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
while(TRUE){
if(in_byte==0b11111110){
dutyQ0=100;
}
if(in_byte==0b11111101){
dutyQ0=75;
}
if(in_byte==0b11111011){
dutyQ0=50;
}
if(in_byte==0b11110111){
dutyQ0=25;
}
if(in_byte==0b11101111){
dutyQ0=0;
}
}
}