/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.BAK |
---|
0,0 → 1,357 |
#include ".\main.h" |
#define KOLMO1 225 // predni kolecko sroubem dopredu |
#define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu |
#define STRED 128 // sredni poloha zataceciho kolecka |
#define BEAR1 12 // 3 stupne zataceni |
#define BEAR2 34 |
#define BEAR3 55 |
#define SPEEDMAX 140 // maximalni rychlost |
#define L 1 // cara vlevo |
#define S 2 // casa mezi sensory |
#define R 0 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// IR |
#define IRTX PIN_B2 |
#define CIHLA PIN_A3 |
//motory |
#define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred |
#define FL output_low(PIN_A1); output_high(PIN_A0) |
#define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad |
#define BL output_low(PIN_A0); output_high(PIN_A1) |
#define STOPR output_low(PIN_A6);output_low(PIN_A7) |
#define STOPL output_low(PIN_A0);output_low(PIN_A1) |
//HID |
#define LED1 PIN_B1 //oranzova |
#define LED2 PIN_B2 //zluta |
#define STROBE PIN_B0 |
//#define SW1 PIN_A2 // Motory On/off |
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
unsigned int8 line; // na ktere strane byla detekovana cara |
//unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
unsigned int8 uhel; // urcuje aktualni uhel zataceni |
//unsigned int8 speed; // maximalni povolena rychlost |
unsigned int8 rovinka; // pocitadlo na zjisteni rovinky |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
// makro pro PWM pro motory |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#int_TIMER2 |
TIMER2_isr() // ovladani serva |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1000); |
for(n=uhel; n>0; n--) Delay_us(2); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
short int IRcheck() // potvrdi detekci cihly |
{ |
output_high(IRTX); // vypne vysilac IR |
delay_ms(100); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal |
{ |
output_low(IRTX); // zapne vysilac IR |
delay_ms(100); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla |
{ |
output_high(IRTX); // vypne vysilac IR |
delay_ms(100); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
output_low(IRTX); // zapne vysilac IR |
if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla |
} |
}; |
output_low(IRTX); // zapne vysilac IR |
return 0; // vrat 0, kdyz je detekovano ruseni |
} |
//////////////////////////////////////////////////////////////////////////////// |
void cikcak() |
{ |
short int movement; |
if(uhel>STRED) |
{ |
movement = R; |
uhel=KOLMO1; |
Delay_ms(60); |
} |
if(uhel<STRED) |
{ |
movement = L; |
uhel=KOLMO2; |
Delay_ms(60); |
} |
sem: |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel |
if(!bit_test(sensors,3) == sensors) |
{ |
if(R == movement) |
{ |
FR;BL; |
movement=L; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(5); |
} |
STOPL;STOPR; |
GoTo sem; |
} |
if(L == movement) |
{ |
FL;BR; |
movement=R; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); |
sensors =~ sensors; |
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel |
} |
STOPL;STOPR; |
GoTo sem; |
} |
} |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
uhel=KOLMO1; |
Delay_ms(100); |
BL;FR; |
Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle |
While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
} |
STOPL; STOPR; |
for (n=0;n<1500;n++) // vystred se na hranu cihly |
{ |
if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
delay_ms(1); |
} |
STOPR;STOPL; |
uhel=STRED; // dopredu |
delay_ms(100); |
FR; FL; |
delay_ms(500); |
BL;BR; |
delay_ms(200); |
STOPL;STOPR; |
uhel=STRED+BEAR3; // doprava |
delay_ms(100); |
FL; |
delay_ms(200); |
uhel=STRED+BEAR2; // min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED+BEAR1; // jeste min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED; // rovne |
FL;FR; |
delay_ms(100); |
While((sensors & 0b01111111)!=0) //dokud neni cara |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
} |
BL; BR; |
delay_ms(400); |
uhel=STRED-BEAR3; // doleva |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 n; |
unsigned int8 i; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DIV_BY_16,140,16); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
STOPR; STOPL; // zastav motory |
Lmotor=0;Rmotor=0; |
uhel=STRED; // nastav zadni kolecko na stred |
rovinka=0; |
enable_interrupts(INT_TIMER2); |
enable_interrupts(GLOBAL); |
output_low(IRTX); // zapni IR vysilac |
delay_ms(1000); |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
delay_us(1500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
i=0; // havarijni kod |
for (n=0; n<=6; n++) |
{ |
if(bit_test(sensors,n)) i++; |
} |
if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
if(bit_test(sensors,7)) // detekce dihly |
{ |
objizdka(); |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
{ |
uhel=STRED-BEAR3; |
Lmotor=0; |
Rmotor=SPEEDMAX; |
line=L; |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED+BEAR3; |
Rmotor=0; |
Lmotor=SPEEDMAX; |
line=R; |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED-BEAR2; |
Lmotor=SPEEDMAX-50; |
Rmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED+BEAR2; |
Rmotor=SPEEDMAX-50; |
Lmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED-BEAR1; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED+BEAR1; |
Rmotor=SPEEDMAX; |
Lmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>250) |
{ |
BL; BR; |
Delay_ms(100); |
}; |
rovinka=0; |
}; |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.HEX |
---|
0,0 → 1,110 |
:1000000000308A00E3290000FF00030E8301A100F5 |
:100010007F08A0000A08A8008A01A00E0408A20018 |
:100020007708A3007808A4007908A5007A08A6003C |
:100030007B08A700831383128C308400801C222845 |
:100040008C183528220884002308F7002408F800BB |
:100050002508F9002608FA002708FB0028088A006E |
:10006000210E8300FF0E7F0E09008A1147280830F9 |
:10007000BC02031C46283C3084000310800C00089E |
:100080000319462844286400800B43280034831653 |
:1000900005118312051564000930BB006D30BC00EA |
:1000A0003720BB0B4E282C08BA00BA0803195E286B |
:1000B0006400000000000000BA03552883160511F3 |
:1000C000831205118C108A1122283930840000080F |
:1000D00003197C280230F800BF30F7006400F70BEA |
:1000E0006E28F80B6C289630F700F70B7528000087 |
:1000F00000006400800B6A280034B50183160513E4 |
:100100008312051383168513831285178316051032 |
:100110008312051083168510831285140230B800EF |
:10012000C830B9006520B80B9028831605138312D8 |
:100130000513831685138312851383160510831206 |
:1001400005108316851083128510E130AC006430F1 |
:10015000B9006520831605108312051083168510DB |
:100160008312851483168513831285138316051352 |
:1001700083120517C830B9006520AA1FCE281308BE |
:10018000930183161418C6288312C12883121308FA |
:10019000AA00AA090430B9006520BD2883160510FD |
:1001A000831205108316851083128510831605139C |
:1001B000831205138316851383128513B701B601C5 |
:1001C0003708053C031C1729031DEA283608DB3CC9 |
:1001D000031C172983168515831285190029831698 |
:1001E000051083120510831685108312851483165B |
:1001F000851383128513831605138312051710299F |
:10020000831685108312851083160510831205143A |
:10021000831605138312051383168513831285171E |
:100220000130B9006520B60A0319B70AE028831621 |
:100230000513831205138316851383128513831602 |
:1002400005108312051083168510831285108030E7 |
:10025000AC006430B90065208316851383128513C2 |
:1002600083160513831205178316851083128510D4 |
:1002700083160510831205140230B800FA30B90055 |
:100280006520B80B3E2983160510831205108316CE |
:1002900085108312851483160513831205138316A4 |
:1002A000851383128517C830B900652083160510A1 |
:1002B000831205108316851083128510831605138B |
:1002C000831205138316851383128513B730AC0090 |
:1002D0006430B9006520831685108312851083165B |
:1002E000051083120514C830B9006520A230AC0097 |
:1002F000831685108312851083160510831205144A |
:10030000831685138312851383160513831205172D |
:10031000C830B90065208C30AC008316851083127C |
:100320008510831605108312051483168513831216 |
:1003300085138316051383120517C830B90065208D |
:100340008030AC008316851083128510831605104B |
:1003500083120514831685138312851383160513E0 |
:10036000831205176430B90065202A087F39031904 |
:10037000C8291308930183161418C0298312BB29B6 |
:1003800083121308AA00AA090430B9006520B52910 |
:1003900083160510831205108316851083128514A9 |
:1003A000831605138312051383168513831285178D |
:1003B0000230B800C830B9006520B80BDA294930DE |
:1003C000AC008A11D12A84011F3083057030831656 |
:1003D0008F001F129F121B0880399B0007309C0062 |
:1003E0001F129F121B0880399B001F1383121F17B7 |
:1003F0009F1783169F1383121F14941283160611DE |
:100400008614061230308312940000308316940054 |
:100410000108C73908388100831290017830F8004C |
:10042000063892008C308316920072308F000513CC |
:100430008312051383168513831285138316051003 |
:10044000831205108316851083128510AF01AE014B |
:10045000B101B0018030AC00AD0183168C14C03006 |
:1004600083128B0483160611831206110430B50023 |
:10047000FA30B9006520B50B382A0108801F432ADD |
:10048000AF1F4B2A452AAF1B542AAF08031D4B2A26 |
:100490002E02031C542A831685108312851083169E |
:1004A0000510831205145C2A8316051083120510AB |
:1004B00083168510831285100108801F622AB11FE0 |
:1004C0006A2A642AB11B732AB108031D6A2A300202 |
:1004D000031C732A83168513831285138316051351 |
:1004E000831205177B2A83160513831205138316BF |
:1004F00085138312851364000130B9006520023032 |
:10050000B500A9018B1BA9178B13F730BC0037204E |
:10051000A91B8B17B50B812A8316061083120610B0 |
:100520001308930183161418972A8312922A8312B0 |
:100530001308AA00AA098316061083120614B40130 |
:10054000B301B201B308031DB92A3208063C031CEB |
:10055000B92A2A08F7003208F8000319B32A031051 |
:10056000F70CF80BAF2A7718B40AB20A0319B30ACA |
:10057000A22A3408033C0318CE2A831605138312DB |
:1005800005138316851383128513831605108312B2 |
:1005900005108316851083128510BD2AAA1FD12A43 |
:1005A0007D28AA1DE12A8030AC00AF018C30AE005E |
:1005B000B101B0000230AB002D0FDF2AE02AAD0AF6 |
:1005C0003D2A2A1CED2A4930AC00AF01AE01B10131 |
:1005D0008C30B0000130AB003D2A2A1FF82AB7301A |
:1005E000AC00B101B001AF018C30AE00AB013D2ACF |
:1005F000AA1C052B5E30AC00AF015A30AE00B10131 |
:100600008C30B0000230AB003D2AAA1E122BA23063 |
:10061000AC00B1015A30B000AF018C30AE000230F6 |
:10062000AB003D2A2A1D222B7430AC00AF018C3068 |
:10063000AE00B101B0000230AB002D0F202B212BFA |
:10064000AD0A3D2A2A1E312B8C30AC00B101B0001E |
:10065000AF01AE000230AB002D0F2F2B302BAD0AB7 |
:100660003D2A2B0B342B372BAB08031D4F2B2D08AA |
:10067000FA3C03184E2B83160510831205108316BF |
:1006800085108312851483160513831205138316B0 |
:100690008513831285176430B9006520AD013D2AAA |
:0206A0006300F5 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.LST |
---|
0,0 → 1,1192 |
CCS PCM C Compiler, Version 3.245, 27853 17-IV-06 12:46 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 849 words (21%) |
Largest free fragment is 2048 |
RAM used: 27 (15%) at main() level |
34 (19%) worst case |
Stack: 4 worst case (2 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 1E3 |
0003: NOP |
0004: MOVWF 7F |
0005: SWAPF 03,W |
0006: CLRF 03 |
0007: MOVWF 21 |
0008: MOVF 7F,W |
0009: MOVWF 20 |
000A: MOVF 0A,W |
000B: MOVWF 28 |
000C: CLRF 0A |
000D: SWAPF 20,F |
000E: MOVF 04,W |
000F: MOVWF 22 |
0010: MOVF 77,W |
0011: MOVWF 23 |
0012: MOVF 78,W |
0013: MOVWF 24 |
0014: MOVF 79,W |
0015: MOVWF 25 |
0016: MOVF 7A,W |
0017: MOVWF 26 |
0018: MOVF 7B,W |
0019: MOVWF 27 |
001A: BCF 03.7 |
001B: BCF 03.5 |
001C: MOVLW 8C |
001D: MOVWF 04 |
001E: BTFSS 00.1 |
001F: GOTO 022 |
0020: BTFSC 0C.1 |
0021: GOTO 035 |
0022: MOVF 22,W |
0023: MOVWF 04 |
0024: MOVF 23,W |
0025: MOVWF 77 |
0026: MOVF 24,W |
0027: MOVWF 78 |
0028: MOVF 25,W |
0029: MOVWF 79 |
002A: MOVF 26,W |
002B: MOVWF 7A |
002C: MOVF 27,W |
002D: MOVWF 7B |
002E: MOVF 28,W |
002F: MOVWF 0A |
0030: SWAPF 21,W |
0031: MOVWF 03 |
0032: SWAPF 7F,F |
0033: SWAPF 7F,W |
0034: RETFIE |
0035: BCF 0A.3 |
0036: GOTO 047 |
.................... #include ".\main.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... |
.................... #FUSES NOWDT //No Watch Dog Timer |
.................... #FUSES INTRC_IO |
.................... #FUSES NOPUT //No Power Up Timer |
.................... #FUSES MCLR //Master Clear pin enabled |
.................... #FUSES NOBROWNOUT //Reset when brownout detected |
.................... #FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18) |
.................... #FUSES NOCPD //No EE protection |
.................... #FUSES NOWRT //Program memory not write protected |
.................... #FUSES NODEBUG //No Debug mode for ICD |
.................... #FUSES NOPROTECT //Code not protected from reading |
.................... #FUSES NOFCMEN //Fail-safe clock monitor enabled |
.................... #FUSES NOIESO //Internal External Switch Over mode enabled |
.................... |
.................... #use delay(clock=8000000,RESTART_WDT) |
0037: MOVLW 08 |
0038: SUBWF 3C,F |
0039: BTFSS 03.0 |
003A: GOTO 046 |
003B: MOVLW 3C |
003C: MOVWF 04 |
003D: BCF 03.0 |
003E: RRF 00,F |
003F: MOVF 00,W |
0040: BTFSC 03.2 |
0041: GOTO 046 |
0042: GOTO 044 |
0043: CLRWDT |
0044: DECFSZ 00,F |
0045: GOTO 043 |
0046: RETLW 00 |
* |
0065: MOVLW 39 |
0066: MOVWF 04 |
0067: MOVF 00,W |
0068: BTFSC 03.2 |
0069: GOTO 07C |
006A: MOVLW 02 |
006B: MOVWF 78 |
006C: MOVLW BF |
006D: MOVWF 77 |
006E: CLRWDT |
006F: DECFSZ 77,F |
0070: GOTO 06E |
0071: DECFSZ 78,F |
0072: GOTO 06C |
0073: MOVLW 96 |
0074: MOVWF 77 |
0075: DECFSZ 77,F |
0076: GOTO 075 |
0077: NOP |
0078: NOP |
0079: CLRWDT |
007A: DECFSZ 00,F |
007B: GOTO 06A |
007C: RETLW 00 |
.................... |
.................... |
.................... |
.................... #define KOLMO1 225 // predni kolecko sroubem dopredu |
.................... #define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu |
.................... #define STRED 128 // sredni poloha zataceciho kolecka |
.................... #define BEAR1 12 // 3 stupne zataceni |
.................... #define BEAR2 34 |
.................... #define BEAR3 55 |
.................... #define SPEEDMAX 140 // maximalni rychlost |
.................... |
.................... #define L 1 // cara vlevo |
.................... #define S 2 // casa mezi sensory |
.................... #define R 0 // cara vpravo |
.................... |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... // IR |
.................... #define IRTX PIN_B2 |
.................... #define CIHLA PIN_A3 |
.................... |
.................... //motory |
.................... #define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred |
.................... #define FL output_low(PIN_A1); output_high(PIN_A0) |
.................... #define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad |
.................... #define BL output_low(PIN_A0); output_high(PIN_A1) |
.................... #define STOPR output_low(PIN_A6);output_low(PIN_A7) |
.................... #define STOPL output_low(PIN_A0);output_low(PIN_A1) |
.................... |
.................... //HID |
.................... #define LED1 PIN_B1 //oranzova |
.................... #define LED2 PIN_B2 //zluta |
.................... |
.................... #define STROBE PIN_B0 |
.................... //#define SW1 PIN_A2 // Motory On/off |
.................... |
.................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
.................... unsigned int8 line; // na ktere strane byla detekovana cara |
.................... //unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
.................... unsigned int8 uhel; // urcuje aktualni uhel zataceni |
.................... //unsigned int8 speed; // maximalni povolena rychlost |
.................... unsigned int8 rovinka; // pocitadlo na zjisteni rovinky |
.................... |
.................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
.................... signed int16 Rmotor; // a pravem motoru |
.................... |
.................... // makro pro PWM pro motory |
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \ |
.................... {direction##motor;} else {stop##motor;} |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #int_TIMER2 |
.................... TIMER2_isr() // ovladani serva |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
0047: BSF 03.5 |
0048: BCF 05.2 |
0049: BCF 03.5 |
004A: BSF 05.2 |
.................... delay_us(1000); |
004B: CLRWDT |
004C: MOVLW 09 |
004D: MOVWF 3B |
004E: MOVLW 6D |
004F: MOVWF 3C |
0050: CALL 037 |
0051: DECFSZ 3B,F |
0052: GOTO 04E |
.................... for(n=uhel; n>0; n--) Delay_us(2); |
0053: MOVF 2C,W |
0054: MOVWF 3A |
0055: MOVF 3A,F |
0056: BTFSC 03.2 |
0057: GOTO 05E |
0058: CLRWDT |
0059: NOP |
005A: NOP |
005B: NOP |
005C: DECF 3A,F |
005D: GOTO 055 |
.................... output_low(SERVO); |
005E: BSF 03.5 |
005F: BCF 05.2 |
0060: BCF 03.5 |
0061: BCF 05.2 |
.................... } |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
0062: BCF 0C.1 |
0063: BCF 0A.3 |
0064: GOTO 022 |
.................... short int IRcheck() // potvrdi detekci cihly |
.................... { |
.................... output_high(IRTX); // vypne vysilac IR |
.................... delay_ms(100); |
.................... |
.................... output_low(STROBE); |
.................... sensors = spi_read(0); // cteni senzoru |
.................... sensors=~sensors; |
.................... output_high(STROBE); |
.................... |
.................... if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal |
.................... { |
.................... output_low(IRTX); // zapne vysilac IR |
.................... delay_ms(100); |
.................... |
.................... output_low(STROBE); |
.................... sensors = spi_read(0); // cteni senzoru |
.................... sensors=~sensors; |
.................... output_high(STROBE); |
.................... |
.................... if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla |
.................... { |
.................... output_high(IRTX); // vypne vysilac IR |
.................... delay_ms(100); |
.................... |
.................... output_low(STROBE); |
.................... sensors = spi_read(0); // cteni senzoru |
.................... sensors=~sensors; |
.................... output_high(STROBE); |
.................... |
.................... output_low(IRTX); // zapne vysilac IR |
.................... if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla |
.................... } |
.................... }; |
.................... output_low(IRTX); // zapne vysilac IR |
.................... return 0; // vrat 0, kdyz je detekovano ruseni |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void objizdka() |
.................... { |
.................... int8 shure=0; |
* |
007D: CLRF 35 |
.................... unsigned int16 n; |
.................... |
.................... BR;BL; |
007E: BSF 03.5 |
007F: BCF 05.6 |
0080: BCF 03.5 |
0081: BCF 05.6 |
0082: BSF 03.5 |
0083: BCF 05.7 |
0084: BCF 03.5 |
0085: BSF 05.7 |
0086: BSF 03.5 |
0087: BCF 05.0 |
0088: BCF 03.5 |
0089: BCF 05.0 |
008A: BSF 03.5 |
008B: BCF 05.1 |
008C: BCF 03.5 |
008D: BSF 05.1 |
.................... Delay_ms(400); |
008E: MOVLW 02 |
008F: MOVWF 38 |
0090: MOVLW C8 |
0091: MOVWF 39 |
0092: CALL 065 |
0093: DECFSZ 38,F |
0094: GOTO 090 |
.................... STOPR;STOPL; |
0095: BSF 03.5 |
0096: BCF 05.6 |
0097: BCF 03.5 |
0098: BCF 05.6 |
0099: BSF 03.5 |
009A: BCF 05.7 |
009B: BCF 03.5 |
009C: BCF 05.7 |
009D: BSF 03.5 |
009E: BCF 05.0 |
009F: BCF 03.5 |
00A0: BCF 05.0 |
00A1: BSF 03.5 |
00A2: BCF 05.1 |
00A3: BCF 03.5 |
00A4: BCF 05.1 |
.................... |
.................... uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota |
00A5: MOVLW E1 |
00A6: MOVWF 2C |
.................... Delay_ms(100); |
00A7: MOVLW 64 |
00A8: MOVWF 39 |
00A9: CALL 065 |
.................... BL;FR; |
00AA: BSF 03.5 |
00AB: BCF 05.0 |
00AC: BCF 03.5 |
00AD: BCF 05.0 |
00AE: BSF 03.5 |
00AF: BCF 05.1 |
00B0: BCF 03.5 |
00B1: BSF 05.1 |
00B2: BSF 03.5 |
00B3: BCF 05.7 |
00B4: BCF 03.5 |
00B5: BCF 05.7 |
00B6: BSF 03.5 |
00B7: BCF 05.6 |
00B8: BCF 03.5 |
00B9: BSF 05.6 |
.................... Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle |
00BA: MOVLW C8 |
00BB: MOVWF 39 |
00BC: CALL 065 |
.................... |
.................... While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru |
.................... { |
00BD: BTFSS 2A.7 |
00BE: GOTO 0CE |
.................... sensors = spi_read(0); // cteni senzoru |
00BF: MOVF 13,W |
00C0: CLRF 13 |
00C1: BSF 03.5 |
00C2: BTFSC 14.0 |
00C3: GOTO 0C6 |
00C4: BCF 03.5 |
00C5: GOTO 0C1 |
00C6: BCF 03.5 |
00C7: MOVF 13,W |
00C8: MOVWF 2A |
.................... sensors=~sensors; |
00C9: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
00CA: MOVLW 04 |
00CB: MOVWF 39 |
00CC: CALL 065 |
.................... } |
00CD: GOTO 0BD |
.................... STOPL; STOPR; |
00CE: BSF 03.5 |
00CF: BCF 05.0 |
00D0: BCF 03.5 |
00D1: BCF 05.0 |
00D2: BSF 03.5 |
00D3: BCF 05.1 |
00D4: BCF 03.5 |
00D5: BCF 05.1 |
00D6: BSF 03.5 |
00D7: BCF 05.6 |
00D8: BCF 03.5 |
00D9: BCF 05.6 |
00DA: BSF 03.5 |
00DB: BCF 05.7 |
00DC: BCF 03.5 |
00DD: BCF 05.7 |
.................... |
.................... for (n=0;n<1500;n++) // vystred se na hranu cihly |
00DE: CLRF 37 |
00DF: CLRF 36 |
00E0: MOVF 37,W |
00E1: SUBLW 05 |
00E2: BTFSS 03.0 |
00E3: GOTO 117 |
00E4: BTFSS 03.2 |
00E5: GOTO 0EA |
00E6: MOVF 36,W |
00E7: SUBLW DB |
00E8: BTFSS 03.0 |
00E9: GOTO 117 |
.................... { |
.................... if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
00EA: BSF 03.5 |
00EB: BSF 05.3 |
00EC: BCF 03.5 |
00ED: BTFSC 05.3 |
00EE: GOTO 100 |
00EF: BSF 03.5 |
00F0: BCF 05.0 |
00F1: BCF 03.5 |
00F2: BCF 05.0 |
00F3: BSF 03.5 |
00F4: BCF 05.1 |
00F5: BCF 03.5 |
00F6: BSF 05.1 |
00F7: BSF 03.5 |
00F8: BCF 05.7 |
00F9: BCF 03.5 |
00FA: BCF 05.7 |
00FB: BSF 03.5 |
00FC: BCF 05.6 |
00FD: BCF 03.5 |
00FE: BSF 05.6 |
00FF: GOTO 110 |
0100: BSF 03.5 |
0101: BCF 05.1 |
0102: BCF 03.5 |
0103: BCF 05.1 |
0104: BSF 03.5 |
0105: BCF 05.0 |
0106: BCF 03.5 |
0107: BSF 05.0 |
0108: BSF 03.5 |
0109: BCF 05.6 |
010A: BCF 03.5 |
010B: BCF 05.6 |
010C: BSF 03.5 |
010D: BCF 05.7 |
010E: BCF 03.5 |
010F: BSF 05.7 |
.................... delay_ms(1); |
0110: MOVLW 01 |
0111: MOVWF 39 |
0112: CALL 065 |
.................... } |
0113: INCF 36,F |
0114: BTFSC 03.2 |
0115: INCF 37,F |
0116: GOTO 0E0 |
.................... STOPR;STOPL; |
0117: BSF 03.5 |
0118: BCF 05.6 |
0119: BCF 03.5 |
011A: BCF 05.6 |
011B: BSF 03.5 |
011C: BCF 05.7 |
011D: BCF 03.5 |
011E: BCF 05.7 |
011F: BSF 03.5 |
0120: BCF 05.0 |
0121: BCF 03.5 |
0122: BCF 05.0 |
0123: BSF 03.5 |
0124: BCF 05.1 |
0125: BCF 03.5 |
0126: BCF 05.1 |
.................... |
.................... uhel=STRED; // dopredu |
0127: MOVLW 80 |
0128: MOVWF 2C |
.................... delay_ms(100); |
0129: MOVLW 64 |
012A: MOVWF 39 |
012B: CALL 065 |
.................... FR; FL; |
012C: BSF 03.5 |
012D: BCF 05.7 |
012E: BCF 03.5 |
012F: BCF 05.7 |
0130: BSF 03.5 |
0131: BCF 05.6 |
0132: BCF 03.5 |
0133: BSF 05.6 |
0134: BSF 03.5 |
0135: BCF 05.1 |
0136: BCF 03.5 |
0137: BCF 05.1 |
0138: BSF 03.5 |
0139: BCF 05.0 |
013A: BCF 03.5 |
013B: BSF 05.0 |
.................... delay_ms(500); |
013C: MOVLW 02 |
013D: MOVWF 38 |
013E: MOVLW FA |
013F: MOVWF 39 |
0140: CALL 065 |
0141: DECFSZ 38,F |
0142: GOTO 13E |
.................... BL;BR; |
0143: BSF 03.5 |
0144: BCF 05.0 |
0145: BCF 03.5 |
0146: BCF 05.0 |
0147: BSF 03.5 |
0148: BCF 05.1 |
0149: BCF 03.5 |
014A: BSF 05.1 |
014B: BSF 03.5 |
014C: BCF 05.6 |
014D: BCF 03.5 |
014E: BCF 05.6 |
014F: BSF 03.5 |
0150: BCF 05.7 |
0151: BCF 03.5 |
0152: BSF 05.7 |
.................... delay_ms(200); |
0153: MOVLW C8 |
0154: MOVWF 39 |
0155: CALL 065 |
.................... STOPL;STOPR; |
0156: BSF 03.5 |
0157: BCF 05.0 |
0158: BCF 03.5 |
0159: BCF 05.0 |
015A: BSF 03.5 |
015B: BCF 05.1 |
015C: BCF 03.5 |
015D: BCF 05.1 |
015E: BSF 03.5 |
015F: BCF 05.6 |
0160: BCF 03.5 |
0161: BCF 05.6 |
0162: BSF 03.5 |
0163: BCF 05.7 |
0164: BCF 03.5 |
0165: BCF 05.7 |
.................... |
.................... uhel=STRED+BEAR3; // doprava |
0166: MOVLW B7 |
0167: MOVWF 2C |
.................... delay_ms(100); |
0168: MOVLW 64 |
0169: MOVWF 39 |
016A: CALL 065 |
.................... FL; |
016B: BSF 03.5 |
016C: BCF 05.1 |
016D: BCF 03.5 |
016E: BCF 05.1 |
016F: BSF 03.5 |
0170: BCF 05.0 |
0171: BCF 03.5 |
0172: BSF 05.0 |
.................... delay_ms(200); |
0173: MOVLW C8 |
0174: MOVWF 39 |
0175: CALL 065 |
.................... uhel=STRED+BEAR2; // min doprava |
0176: MOVLW A2 |
0177: MOVWF 2C |
.................... FL;FR; |
0178: BSF 03.5 |
0179: BCF 05.1 |
017A: BCF 03.5 |
017B: BCF 05.1 |
017C: BSF 03.5 |
017D: BCF 05.0 |
017E: BCF 03.5 |
017F: BSF 05.0 |
0180: BSF 03.5 |
0181: BCF 05.7 |
0182: BCF 03.5 |
0183: BCF 05.7 |
0184: BSF 03.5 |
0185: BCF 05.6 |
0186: BCF 03.5 |
0187: BSF 05.6 |
.................... delay_ms(200); |
0188: MOVLW C8 |
0189: MOVWF 39 |
018A: CALL 065 |
.................... uhel=STRED+BEAR1; // jeste min doprava |
018B: MOVLW 8C |
018C: MOVWF 2C |
.................... FL;FR; |
018D: BSF 03.5 |
018E: BCF 05.1 |
018F: BCF 03.5 |
0190: BCF 05.1 |
0191: BSF 03.5 |
0192: BCF 05.0 |
0193: BCF 03.5 |
0194: BSF 05.0 |
0195: BSF 03.5 |
0196: BCF 05.7 |
0197: BCF 03.5 |
0198: BCF 05.7 |
0199: BSF 03.5 |
019A: BCF 05.6 |
019B: BCF 03.5 |
019C: BSF 05.6 |
.................... delay_ms(200); |
019D: MOVLW C8 |
019E: MOVWF 39 |
019F: CALL 065 |
.................... uhel=STRED; // rovne |
01A0: MOVLW 80 |
01A1: MOVWF 2C |
.................... FL;FR; |
01A2: BSF 03.5 |
01A3: BCF 05.1 |
01A4: BCF 03.5 |
01A5: BCF 05.1 |
01A6: BSF 03.5 |
01A7: BCF 05.0 |
01A8: BCF 03.5 |
01A9: BSF 05.0 |
01AA: BSF 03.5 |
01AB: BCF 05.7 |
01AC: BCF 03.5 |
01AD: BCF 05.7 |
01AE: BSF 03.5 |
01AF: BCF 05.6 |
01B0: BCF 03.5 |
01B1: BSF 05.6 |
.................... delay_ms(100); |
01B2: MOVLW 64 |
01B3: MOVWF 39 |
01B4: CALL 065 |
.................... While((sensors & 0b01111111)!=0) //dokud neni cara |
.................... { |
01B5: MOVF 2A,W |
01B6: ANDLW 7F |
01B7: BTFSC 03.2 |
01B8: GOTO 1C8 |
.................... sensors = spi_read(0); // cteni senzoru |
01B9: MOVF 13,W |
01BA: CLRF 13 |
01BB: BSF 03.5 |
01BC: BTFSC 14.0 |
01BD: GOTO 1C0 |
01BE: BCF 03.5 |
01BF: GOTO 1BB |
01C0: BCF 03.5 |
01C1: MOVF 13,W |
01C2: MOVWF 2A |
.................... sensors=~sensors; |
01C3: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
01C4: MOVLW 04 |
01C5: MOVWF 39 |
01C6: CALL 065 |
.................... } |
01C7: GOTO 1B5 |
.................... BL; BR; |
01C8: BSF 03.5 |
01C9: BCF 05.0 |
01CA: BCF 03.5 |
01CB: BCF 05.0 |
01CC: BSF 03.5 |
01CD: BCF 05.1 |
01CE: BCF 03.5 |
01CF: BSF 05.1 |
01D0: BSF 03.5 |
01D1: BCF 05.6 |
01D2: BCF 03.5 |
01D3: BCF 05.6 |
01D4: BSF 03.5 |
01D5: BCF 05.7 |
01D6: BCF 03.5 |
01D7: BSF 05.7 |
.................... delay_ms(400); |
01D8: MOVLW 02 |
01D9: MOVWF 38 |
01DA: MOVLW C8 |
01DB: MOVWF 39 |
01DC: CALL 065 |
01DD: DECFSZ 38,F |
01DE: GOTO 1DA |
.................... |
.................... uhel=STRED-BEAR3; // doleva |
01DF: MOVLW 49 |
01E0: MOVWF 2C |
.................... } |
01E1: BCF 0A.3 |
01E2: GOTO 2D1 (RETURN) |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
01E3: CLRF 04 |
01E4: MOVLW 1F |
01E5: ANDWF 03,F |
01E6: MOVLW 70 |
01E7: BSF 03.5 |
01E8: MOVWF 0F |
01E9: BCF 1F.4 |
01EA: BCF 1F.5 |
01EB: MOVF 1B,W |
01EC: ANDLW 80 |
01ED: MOVWF 1B |
01EE: MOVLW 07 |
01EF: MOVWF 1C |
.................... |
.................... unsigned int16 n; |
.................... unsigned int8 i; |
.................... |
.................... setup_adc_ports(NO_ANALOGS); |
01F0: BCF 1F.4 |
01F1: BCF 1F.5 |
01F2: MOVF 1B,W |
01F3: ANDLW 80 |
01F4: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
01F5: BCF 1F.6 |
01F6: BCF 03.5 |
01F7: BSF 1F.6 |
01F8: BSF 1F.7 |
01F9: BSF 03.5 |
01FA: BCF 1F.7 |
01FB: BCF 03.5 |
01FC: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
01FD: BCF 14.5 |
01FE: BSF 03.5 |
01FF: BCF 06.2 |
0200: BSF 06.1 |
0201: BCF 06.4 |
0202: MOVLW 30 |
0203: BCF 03.5 |
0204: MOVWF 14 |
0205: MOVLW 00 |
0206: BSF 03.5 |
0207: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
0208: MOVF 01,W |
0209: ANDLW C7 |
020A: IORLW 08 |
020B: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
020C: BCF 03.5 |
020D: CLRF 10 |
.................... setup_timer_2(T2_DIV_BY_16,140,16); |
020E: MOVLW 78 |
020F: MOVWF 78 |
0210: IORLW 06 |
0211: MOVWF 12 |
0212: MOVLW 8C |
0213: BSF 03.5 |
0214: MOVWF 12 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
0215: MOVLW 72 |
0216: MOVWF 0F |
.................... |
.................... STOPR; STOPL; // zastav motory |
0217: BCF 05.6 |
0218: BCF 03.5 |
0219: BCF 05.6 |
021A: BSF 03.5 |
021B: BCF 05.7 |
021C: BCF 03.5 |
021D: BCF 05.7 |
021E: BSF 03.5 |
021F: BCF 05.0 |
0220: BCF 03.5 |
0221: BCF 05.0 |
0222: BSF 03.5 |
0223: BCF 05.1 |
0224: BCF 03.5 |
0225: BCF 05.1 |
.................... Lmotor=0;Rmotor=0; |
0226: CLRF 2F |
0227: CLRF 2E |
0228: CLRF 31 |
0229: CLRF 30 |
.................... |
.................... uhel=STRED; // nastav zadni kolecko na stred |
022A: MOVLW 80 |
022B: MOVWF 2C |
.................... rovinka=0; |
022C: CLRF 2D |
.................... |
.................... enable_interrupts(INT_TIMER2); |
022D: BSF 03.5 |
022E: BSF 0C.1 |
.................... enable_interrupts(GLOBAL); |
022F: MOVLW C0 |
0230: BCF 03.5 |
0231: IORWF 0B,F |
.................... |
.................... output_low(IRTX); // zapni IR vysilac |
0232: BSF 03.5 |
0233: BCF 06.2 |
0234: BCF 03.5 |
0235: BCF 06.2 |
.................... |
.................... delay_ms(1000); |
0236: MOVLW 04 |
0237: MOVWF 35 |
0238: MOVLW FA |
0239: MOVWF 39 |
023A: CALL 065 |
023B: DECFSZ 35,F |
023C: GOTO 238 |
.................... |
.................... while(true) |
.................... { |
.................... |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
023D: MOVF 01,W |
023E: BTFSS 00.7 |
023F: GOTO 243 |
0240: BTFSS 2F.7 |
0241: GOTO 24B |
0242: GOTO 245 |
0243: BTFSC 2F.7 |
0244: GOTO 254 |
0245: MOVF 2F,F |
0246: BTFSS 03.2 |
0247: GOTO 24B |
0248: SUBWF 2E,W |
0249: BTFSS 03.0 |
024A: GOTO 254 |
024B: BSF 03.5 |
024C: BCF 05.1 |
024D: BCF 03.5 |
024E: BCF 05.1 |
024F: BSF 03.5 |
0250: BCF 05.0 |
0251: BCF 03.5 |
0252: BSF 05.0 |
0253: GOTO 25C |
0254: BSF 03.5 |
0255: BCF 05.0 |
0256: BCF 03.5 |
0257: BCF 05.0 |
0258: BSF 03.5 |
0259: BCF 05.1 |
025A: BCF 03.5 |
025B: BCF 05.1 |
025C: MOVF 01,W |
025D: BTFSS 00.7 |
025E: GOTO 262 |
025F: BTFSS 31.7 |
0260: GOTO 26A |
0261: GOTO 264 |
0262: BTFSC 31.7 |
0263: GOTO 273 |
0264: MOVF 31,F |
0265: BTFSS 03.2 |
0266: GOTO 26A |
0267: SUBWF 30,W |
0268: BTFSS 03.0 |
0269: GOTO 273 |
026A: BSF 03.5 |
026B: BCF 05.7 |
026C: BCF 03.5 |
026D: BCF 05.7 |
026E: BSF 03.5 |
026F: BCF 05.6 |
0270: BCF 03.5 |
0271: BSF 05.6 |
0272: GOTO 27B |
0273: BSF 03.5 |
0274: BCF 05.6 |
0275: BCF 03.5 |
0276: BCF 05.6 |
0277: BSF 03.5 |
0278: BCF 05.7 |
0279: BCF 03.5 |
027A: BCF 05.7 |
.................... |
.................... delay_us(1500); |
027B: CLRWDT |
027C: MOVLW 01 |
027D: MOVWF 39 |
027E: CALL 065 |
027F: MOVLW 02 |
0280: MOVWF 35 |
0281: CLRF 29 |
0282: BTFSC 0B.7 |
0283: BSF 29.7 |
0284: BCF 0B.7 |
0285: MOVLW F7 |
0286: MOVWF 3C |
0287: CALL 037 |
0288: BTFSC 29.7 |
0289: BSF 0B.7 |
028A: DECFSZ 35,F |
028B: GOTO 281 |
.................... |
.................... output_low(STROBE); |
028C: BSF 03.5 |
028D: BCF 06.0 |
028E: BCF 03.5 |
028F: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru |
0290: MOVF 13,W |
0291: CLRF 13 |
0292: BSF 03.5 |
0293: BTFSC 14.0 |
0294: GOTO 297 |
0295: BCF 03.5 |
0296: GOTO 292 |
0297: BCF 03.5 |
0298: MOVF 13,W |
0299: MOVWF 2A |
.................... sensors=~sensors; |
029A: COMF 2A,F |
.................... output_high(STROBE); |
029B: BSF 03.5 |
029C: BCF 06.0 |
029D: BCF 03.5 |
029E: BSF 06.0 |
.................... |
.................... i=0; // havarijni kod |
029F: CLRF 34 |
.................... for (n=0; n<=6; n++) |
02A0: CLRF 33 |
02A1: CLRF 32 |
02A2: MOVF 33,F |
02A3: BTFSS 03.2 |
02A4: GOTO 2B9 |
02A5: MOVF 32,W |
02A6: SUBLW 06 |
02A7: BTFSS 03.0 |
02A8: GOTO 2B9 |
.................... { |
.................... if(bit_test(sensors,n)) i++; |
02A9: MOVF 2A,W |
02AA: MOVWF 77 |
02AB: MOVF 32,W |
02AC: MOVWF 78 |
02AD: BTFSC 03.2 |
02AE: GOTO 2B3 |
02AF: BCF 03.0 |
02B0: RRF 77,F |
02B1: DECFSZ 78,F |
02B2: GOTO 2AF |
02B3: BTFSC 77.0 |
02B4: INCF 34,F |
.................... } |
02B5: INCF 32,F |
02B6: BTFSC 03.2 |
02B7: INCF 33,F |
02B8: GOTO 2A2 |
.................... if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
02B9: MOVF 34,W |
02BA: SUBLW 03 |
02BB: BTFSC 03.0 |
02BC: GOTO 2CE |
02BD: BSF 03.5 |
02BE: BCF 05.6 |
02BF: BCF 03.5 |
02C0: BCF 05.6 |
02C1: BSF 03.5 |
02C2: BCF 05.7 |
02C3: BCF 03.5 |
02C4: BCF 05.7 |
02C5: BSF 03.5 |
02C6: BCF 05.0 |
02C7: BCF 03.5 |
02C8: BCF 05.0 |
02C9: BSF 03.5 |
02CA: BCF 05.1 |
02CB: BCF 03.5 |
02CC: BCF 05.1 |
02CD: GOTO 2BD |
.................... |
.................... if(bit_test(sensors,7)) // detekce dihly |
02CE: BTFSS 2A.7 |
02CF: GOTO 2D1 |
.................... { |
.................... objizdka(); |
02D0: GOTO 07D |
.................... } |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
02D1: BTFSS 2A.3 |
02D2: GOTO 2E1 |
.................... { |
.................... uhel=STRED; |
02D3: MOVLW 80 |
02D4: MOVWF 2C |
.................... Lmotor=SPEEDMAX; |
02D5: CLRF 2F |
02D6: MOVLW 8C |
02D7: MOVWF 2E |
.................... Rmotor=SPEEDMAX; |
02D8: CLRF 31 |
02D9: MOVWF 30 |
.................... line=S; |
02DA: MOVLW 02 |
02DB: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
02DC: INCFSZ 2D,W |
02DD: GOTO 2DF |
02DE: GOTO 2E0 |
02DF: INCF 2D,F |
.................... continue; |
02E0: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
02E1: BTFSS 2A.0 |
02E2: GOTO 2ED |
.................... { |
.................... uhel=STRED-BEAR3; |
02E3: MOVLW 49 |
02E4: MOVWF 2C |
.................... Lmotor=0; |
02E5: CLRF 2F |
02E6: CLRF 2E |
.................... Rmotor=SPEEDMAX; |
02E7: CLRF 31 |
02E8: MOVLW 8C |
02E9: MOVWF 30 |
.................... line=L; |
02EA: MOVLW 01 |
02EB: MOVWF 2B |
.................... continue; |
02EC: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
02ED: BTFSS 2A.6 |
02EE: GOTO 2F8 |
.................... { |
.................... uhel=STRED+BEAR3; |
02EF: MOVLW B7 |
02F0: MOVWF 2C |
.................... Rmotor=0; |
02F1: CLRF 31 |
02F2: CLRF 30 |
.................... Lmotor=SPEEDMAX; |
02F3: CLRF 2F |
02F4: MOVLW 8C |
02F5: MOVWF 2E |
.................... line=R; |
02F6: CLRF 2B |
.................... continue; |
02F7: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
02F8: BTFSS 2A.1 |
02F9: GOTO 305 |
.................... { |
.................... uhel=STRED-BEAR2; |
02FA: MOVLW 5E |
02FB: MOVWF 2C |
.................... Lmotor=SPEEDMAX-50; |
02FC: CLRF 2F |
02FD: MOVLW 5A |
02FE: MOVWF 2E |
.................... Rmotor=SPEEDMAX; |
02FF: CLRF 31 |
0300: MOVLW 8C |
0301: MOVWF 30 |
.................... line=S; |
0302: MOVLW 02 |
0303: MOVWF 2B |
.................... continue; |
0304: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
0305: BTFSS 2A.5 |
0306: GOTO 312 |
.................... { |
.................... uhel=STRED+BEAR2; |
0307: MOVLW A2 |
0308: MOVWF 2C |
.................... Rmotor=SPEEDMAX-50; |
0309: CLRF 31 |
030A: MOVLW 5A |
030B: MOVWF 30 |
.................... Lmotor=SPEEDMAX; |
030C: CLRF 2F |
030D: MOVLW 8C |
030E: MOVWF 2E |
.................... line=S; |
030F: MOVLW 02 |
0310: MOVWF 2B |
.................... continue; |
0311: GOTO 23D |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
0312: BTFSS 2A.2 |
0313: GOTO 322 |
.................... { |
.................... uhel=STRED-BEAR1; |
0314: MOVLW 74 |
0315: MOVWF 2C |
.................... Lmotor=SPEEDMAX; |
0316: CLRF 2F |
0317: MOVLW 8C |
0318: MOVWF 2E |
.................... Rmotor=SPEEDMAX; |
0319: CLRF 31 |
031A: MOVWF 30 |
.................... line=S; |
031B: MOVLW 02 |
031C: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
031D: INCFSZ 2D,W |
031E: GOTO 320 |
031F: GOTO 321 |
0320: INCF 2D,F |
.................... continue; |
0321: GOTO 23D |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
0322: BTFSS 2A.4 |
0323: GOTO 331 |
.................... { |
.................... uhel=STRED+BEAR1; |
0324: MOVLW 8C |
0325: MOVWF 2C |
.................... Rmotor=SPEEDMAX; |
0326: CLRF 31 |
0327: MOVWF 30 |
.................... Lmotor=SPEEDMAX; |
0328: CLRF 2F |
0329: MOVWF 2E |
.................... line=S; |
032A: MOVLW 02 |
032B: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
032C: INCFSZ 2D,W |
032D: GOTO 32F |
032E: GOTO 330 |
032F: INCF 2D,F |
.................... continue; |
0330: GOTO 23D |
.................... } |
.................... |
.................... if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
0331: DECFSZ 2B,W |
0332: GOTO 334 |
0333: GOTO 337 |
0334: MOVF 2B,F |
0335: BTFSS 03.2 |
0336: GOTO 34F |
.................... { |
.................... if (rovinka>250) |
0337: MOVF 2D,W |
0338: SUBLW FA |
0339: BTFSC 03.0 |
033A: GOTO 34E |
.................... { |
.................... BL; BR; |
033B: BSF 03.5 |
033C: BCF 05.0 |
033D: BCF 03.5 |
033E: BCF 05.0 |
033F: BSF 03.5 |
0340: BCF 05.1 |
0341: BCF 03.5 |
0342: BSF 05.1 |
0343: BSF 03.5 |
0344: BCF 05.6 |
0345: BCF 03.5 |
0346: BCF 05.6 |
0347: BSF 03.5 |
0348: BCF 05.7 |
0349: BCF 03.5 |
034A: BSF 05.7 |
.................... Delay_ms(100); |
034B: MOVLW 64 |
034C: MOVWF 39 |
034D: CALL 065 |
.................... }; |
.................... rovinka=0; |
034E: CLRF 2D |
.................... }; |
.................... |
.................... } |
034F: GOTO 23D |
.................... } |
0350: SLEEP |
Configuration Fuses: |
Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO |
Word 2: 3FFC NOFCMEN NOIESO |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.PJT |
---|
0,0 → 1,41 |
[PROJECT] |
Target=main.HEX |
Development_Mode= |
Processor=0x688F |
ToolSuite=CCS |
[Directories] |
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\dr |
Library= |
LinkerScript= |
[Target Data] |
FileList=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[main.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=main.c |
[Windows] |
0=0000 main.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
5= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.SYM |
---|
0,0 → 1,70 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 @INTERRUPT_AREA |
021 @INTERRUPT_AREA |
022 @INTERRUPT_AREA |
023 @INTERRUPT_AREA |
024 @INTERRUPT_AREA |
025 @INTERRUPT_AREA |
026 @INTERRUPT_AREA |
027 @INTERRUPT_AREA |
028 @INTERRUPT_AREA |
029 @INTERRUPT_AREA |
02A sensors |
02B line |
02C uhel |
02D rovinka |
02E-02F Lmotor |
030-031 Rmotor |
032-033 main.n |
034 main.i |
035 objizdka.shure |
035 main.@SCRATCH |
036-037 objizdka.n |
038 objizdka.@SCRATCH |
039 @delay_ms1.P1 |
03A TIMER2_isr.n |
03B TIMER2_isr.@SCRATCH |
03C @delay_us1.P1 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
09C.6 C1OUT |
09C.7 C2OUT |
0065 @delay_ms1 |
0037 @delay_us1 |
0047 TIMER2_isr |
007D objizdka |
01E3 main |
01E3 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
Compiler Settings: |
Processor: PIC16F88 |
Pointer Size: 8 |
ADC Range: 0-255 |
Opt Level: 9 |
Short,Int,Long: 1,8,16 |
Output Files: |
Errors: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.c |
---|
0,0 → 1,302 |
#include ".\main.h" |
#define KOLMO1 225 // predni kolecko sroubem dopredu |
#define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu |
#define STRED 128 // sredni poloha zataceciho kolecka |
#define BEAR1 12 // 3 stupne zataceni |
#define BEAR2 34 |
#define BEAR3 55 |
#define SPEEDMAX 140 // maximalni rychlost |
#define L 1 // cara vlevo |
#define S 2 // casa mezi sensory |
#define R 0 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// IR |
#define IRTX PIN_B2 |
#define CIHLA PIN_A3 |
//motory |
#define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred |
#define FL output_low(PIN_A1); output_high(PIN_A0) |
#define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad |
#define BL output_low(PIN_A0); output_high(PIN_A1) |
#define STOPR output_low(PIN_A6);output_low(PIN_A7) |
#define STOPL output_low(PIN_A0);output_low(PIN_A1) |
//HID |
#define LED1 PIN_B1 //oranzova |
#define LED2 PIN_B2 //zluta |
#define STROBE PIN_B0 |
//#define SW1 PIN_A2 // Motory On/off |
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
unsigned int8 line; // na ktere strane byla detekovana cara |
//unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
unsigned int8 uhel; // urcuje aktualni uhel zataceni |
//unsigned int8 speed; // maximalni povolena rychlost |
unsigned int8 rovinka; // pocitadlo na zjisteni rovinky |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
// makro pro PWM pro motory |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#int_TIMER2 |
TIMER2_isr() // ovladani serva |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1000); |
for(n=uhel; n>0; n--) Delay_us(2); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
short int IRcheck() // potvrdi detekci cihly |
{ |
output_high(IRTX); // vypne vysilac IR |
delay_ms(100); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal |
{ |
output_low(IRTX); // zapne vysilac IR |
delay_ms(100); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla |
{ |
output_high(IRTX); // vypne vysilac IR |
delay_ms(100); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
output_low(IRTX); // zapne vysilac IR |
if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla |
} |
}; |
output_low(IRTX); // zapne vysilac IR |
return 0; // vrat 0, kdyz je detekovano ruseni |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota |
Delay_ms(100); |
BL;FR; |
Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle |
While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
} |
STOPL; STOPR; |
for (n=0;n<1500;n++) // vystred se na hranu cihly |
{ |
if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
delay_ms(1); |
} |
STOPR;STOPL; |
uhel=STRED; // dopredu |
delay_ms(100); |
FR; FL; |
delay_ms(500); |
BL;BR; |
delay_ms(200); |
STOPL;STOPR; |
uhel=STRED+BEAR3; // doprava |
delay_ms(100); |
FL; |
delay_ms(200); |
uhel=STRED+BEAR2; // min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED+BEAR1; // jeste min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED; // rovne |
FL;FR; |
delay_ms(100); |
While((sensors & 0b01111111)!=0) //dokud neni cara |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
} |
BL; BR; |
delay_ms(400); |
uhel=STRED-BEAR3; // doleva |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 n; |
unsigned int8 i; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DIV_BY_16,140,16); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
STOPR; STOPL; // zastav motory |
Lmotor=0;Rmotor=0; |
uhel=STRED; // nastav zadni kolecko na stred |
rovinka=0; |
enable_interrupts(INT_TIMER2); |
enable_interrupts(GLOBAL); |
output_low(IRTX); // zapni IR vysilac |
delay_ms(1000); |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
delay_us(1500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
i=0; // havarijni kod |
for (n=0; n<=6; n++) |
{ |
if(bit_test(sensors,n)) i++; |
} |
if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
if(bit_test(sensors,7)) // detekce dihly |
{ |
objizdka(); |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
{ |
uhel=STRED-BEAR3; |
Lmotor=0; |
Rmotor=SPEEDMAX; |
line=L; |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED+BEAR3; |
Rmotor=0; |
Lmotor=SPEEDMAX; |
line=R; |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED-BEAR2; |
Lmotor=SPEEDMAX-50; |
Rmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED+BEAR2; |
Rmotor=SPEEDMAX-50; |
Lmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED-BEAR1; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED+BEAR1; |
Rmotor=SPEEDMAX; |
Lmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>250) |
{ |
BL; BR; |
Delay_ms(100); |
}; |
rovinka=0; |
}; |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.cof |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.h |
---|
0,0 → 1,18 |
#include <16F88.h> |
#device adc=8 |
#FUSES NOWDT //No Watch Dog Timer |
#FUSES INTRC_IO |
#FUSES NOPUT //No Power Up Timer |
#FUSES MCLR //Master Clear pin enabled |
#FUSES NOBROWNOUT //Reset when brownout detected |
#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18) |
#FUSES NOCPD //No EE protection |
#FUSES NOWRT //Program memory not write protected |
#FUSES NODEBUG //No Debug mode for ICD |
#FUSES NOPROTECT //Code not protected from reading |
#FUSES NOFCMEN //Fail-safe clock monitor enabled |
#FUSES NOIESO //Internal External Switch Over mode enabled |
#use delay(clock=8000000,RESTART_WDT) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.sta |
---|
0,0 → 1,33 |
ROM used: 849 (21%) |
849 (21%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 27 (15%) at main() level |
34 (19%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
303 252 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
1202 504 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 3 1 @delay_ms1 |
0 16 2 1 @delay_us1 |
0 30 4 2 TIMER2_isr |
0 358 42 4 objizdka |
0 366 43 4 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-00036 51 0 |
00037-007FF 794 1199 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.tre |
---|
0,0 → 1,25 |
ÀÄmain |
ÃÄmain 0/366 Ram=4 |
³ ÃÄ??0?? |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_us1 0/16 Ram=1 |
³ ÃÄobjizdka 0/358 Ram=4 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÀÄ@delay_ms1 0/24 Ram=1 |
³ ÀÄ@delay_ms1 0/24 Ram=1 |
ÀÄTIMER2_isr 0/30 Ram=2 |
ÀÄ@delay_us1 0/16 Ram=1 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.BAK |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.HEX |
---|
0,0 → 1,39 |
:1000000000308A000428000084011F30830560301E |
:1000100083168F0086108312861483161F129F1278 |
:100020001B0880399B0007309C001F129F121B0881 |
:1000300080397F389B001F1383121F179F17831669 |
:100040009F1383121F14941283160611861406162A |
:100050003530831294004030831694000108C7396C |
:1000600008388100831290010030F80092000030BF |
:100070008316920007309C00050864000230F700E8 |
:10008000F70B4028000000001C0883120D13831694 |
:100090009D0108308312A100A200A3010030F800E6 |
:1000A0001F08C73978049F00A40164000230F700DC |
:1000B000F70B5828000000001F151F195D281E08A7 |
:1000C000A5000830F8001F08C73978049F002508EC |
:1000D0003B3C031C74282508283C0318732822087D |
:1000E0000139A404742824141F151F1975281E082B |
:1000F000A5001030F8001F08C73978049F002508B4 |
:100100003B3C031C8C282508283C03188B2822081C |
:100110000239A4048C28A4141F151F198D281E0849 |
:10012000A5001830F8001F08C73978049F0025087B |
:100130003B3C031CA4282508283C0318A3282208BC |
:100140000439A404A42824151F151F19A5281E0866 |
:10015000A5002030F8001F08C73978049F00250843 |
:100160003B3C031CBC282508283C0318BB2822085C |
:100170000839A404BC28A4151F151F19BD281E0882 |
:10018000A5002830F8001F08C73978049F0025080B |
:100190003B3C031CD4282508283C0318D3282208FC |
:1001A0001039A404D42824161F151F19D5281E0899 |
:1001B000A5003030F8001F08C73978049F002508D3 |
:1001C0003B3C031CEC282508283C0318EB2822089C |
:1001D0002039A404EC28A4161F151F19ED281E08A9 |
:1001E000A50025083B3C031CFE282508283C0318D5 |
:1001F000FD2822084039A404FE2824172408A20060 |
:1002000083160614831206180A29230F08290929C0 |
:10021000A30A0B29A3012308323C031CA417A40939 |
:1002200024089300831614181729831212298312A5 |
:040230004E286300F1 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.LST |
---|
0,0 → 1,454 |
CCS PCM C Compiler, Version 3.245, 27853 16-IV-06 23:31 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
ROM used: 282 words (7%) |
Largest free fragment is 2048 |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Stack: 0 locations |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 004 |
0003: NOP |
.................... #include ".\cidla.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
.................... #use delay(clock=4000000,RESTART_WDT) |
.................... |
.................... |
.................... //#include <stdlib.h> |
.................... |
.................... #use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
.................... |
.................... #define IRRX PIN_B0 |
.................... |
.................... #define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
.................... #define TRESHOLD_MIN 40 |
.................... #define CIHLA 50 // doba, po kterou musi byt detekovana cihla |
.................... |
.................... unsigned int8 radius; // co cidla vidi |
.................... unsigned int8 last_radius; // rozsah |
.................... unsigned int8 last_cidla; // co cidla videla minule |
.................... unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
.................... |
.................... //tuning |
.................... /*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
.................... |
.................... //Vystup PWM je na PIN_B3 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
.................... { |
.................... unsigned int8 i,n; |
.................... for(n=0;n<=3;n++) |
.................... { |
.................... for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
.................... for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
.................... } |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
0004: CLRF 04 |
0005: MOVLW 1F |
0006: ANDWF 03,F |
0007: MOVLW 60 |
0008: BSF 03.5 |
0009: MOVWF 0F |
000A: BCF 06.1 |
000B: BCF 03.5 |
000C: BSF 06.1 |
000D: BSF 03.5 |
000E: BCF 1F.4 |
000F: BCF 1F.5 |
0010: MOVF 1B,W |
0011: ANDLW 80 |
0012: MOVWF 1B |
0013: MOVLW 07 |
0014: MOVWF 1C |
.................... int8 cidla; |
.................... unsigned int8 a; |
.................... unsigned int8 n; |
.................... |
.................... setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
0015: BCF 1F.4 |
0016: BCF 1F.5 |
0017: MOVF 1B,W |
0018: ANDLW 80 |
0019: IORLW 7F |
001A: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
001B: BCF 1F.6 |
001C: BCF 03.5 |
001D: BSF 1F.6 |
001E: BSF 1F.7 |
001F: BSF 03.5 |
0020: BCF 1F.7 |
0021: BCF 03.5 |
0022: BSF 1F.0 |
.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
0023: BCF 14.5 |
0024: BSF 03.5 |
0025: BCF 06.2 |
0026: BSF 06.1 |
0027: BSF 06.4 |
0028: MOVLW 35 |
0029: BCF 03.5 |
002A: MOVWF 14 |
002B: MOVLW 40 |
002C: BSF 03.5 |
002D: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
002E: MOVF 01,W |
002F: ANDLW C7 |
0030: IORLW 08 |
0031: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
0032: BCF 03.5 |
0033: CLRF 10 |
.................... setup_timer_2(T2_DISABLED,0,1); |
0034: MOVLW 00 |
0035: MOVWF 78 |
0036: MOVWF 12 |
0037: MOVLW 00 |
0038: BSF 03.5 |
0039: MOVWF 12 |
.................... setup_comparator(NC_NC_NC_NC); |
003A: MOVLW 07 |
003B: MOVWF 1C |
003C: MOVF 05,W |
003D: CLRWDT |
003E: MOVLW 02 |
003F: MOVWF 77 |
0040: DECFSZ 77,F |
0041: GOTO 040 |
0042: NOP |
0043: NOP |
0044: MOVF 1C,W |
0045: BCF 03.5 |
0046: BCF 0D.6 |
.................... setup_vref(FALSE); |
0047: BSF 03.5 |
0048: CLRF 1D |
.................... |
.................... last_radius=0b00001000; // minimalni rozsah snimani od stredu |
0049: MOVLW 08 |
004A: BCF 03.5 |
004B: MOVWF 21 |
.................... last_cidla=0b00001000; |
004C: MOVWF 22 |
.................... |
.................... shure=0; |
004D: CLRF 23 |
.................... |
.................... while(true) |
.................... { |
.................... set_adc_channel(0); |
004E: MOVLW 00 |
004F: MOVWF 78 |
0050: MOVF 1F,W |
0051: ANDLW C7 |
0052: IORWF 78,W |
0053: MOVWF 1F |
.................... cidla=0; |
0054: CLRF 24 |
.................... Delay_us(10); |
0055: CLRWDT |
0056: MOVLW 02 |
0057: MOVWF 77 |
0058: DECFSZ 77,F |
0059: GOTO 058 |
005A: NOP |
005B: NOP |
.................... a=read_adc(); |
005C: BSF 1F.2 |
005D: BTFSC 1F.2 |
005E: GOTO 05D |
005F: MOVF 1E,W |
0060: MOVWF 25 |
.................... |
.................... set_adc_channel(1); |
0061: MOVLW 08 |
0062: MOVWF 78 |
0063: MOVF 1F,W |
0064: ANDLW C7 |
0065: IORWF 78,W |
0066: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) //hystereze cidel |
0067: MOVF 25,W |
0068: SUBLW 3B |
0069: BTFSS 03.0 |
006A: GOTO 074 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
006B: MOVF 25,W |
006C: SUBLW 28 |
006D: BTFSC 03.0 |
006E: GOTO 073 |
.................... { |
.................... cidla |= (last_cidla & 0b00000001); |
006F: MOVF 22,W |
0070: ANDLW 01 |
0071: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000001; |
0072: GOTO 074 |
0073: BSF 24.0 |
.................... } |
.................... |
.................... a=read_adc(); |
0074: BSF 1F.2 |
0075: BTFSC 1F.2 |
0076: GOTO 075 |
0077: MOVF 1E,W |
0078: MOVWF 25 |
.................... |
.................... set_adc_channel(2); |
0079: MOVLW 10 |
007A: MOVWF 78 |
007B: MOVF 1F,W |
007C: ANDLW C7 |
007D: IORWF 78,W |
007E: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
007F: MOVF 25,W |
0080: SUBLW 3B |
0081: BTFSS 03.0 |
0082: GOTO 08C |
.................... { |
.................... if(a>TRESHOLD_MIN) |
0083: MOVF 25,W |
0084: SUBLW 28 |
0085: BTFSC 03.0 |
0086: GOTO 08B |
.................... { |
.................... cidla |= (last_cidla & 0b00000010); |
0087: MOVF 22,W |
0088: ANDLW 02 |
0089: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000010; |
008A: GOTO 08C |
008B: BSF 24.1 |
.................... } |
.................... |
.................... a=read_adc(); |
008C: BSF 1F.2 |
008D: BTFSC 1F.2 |
008E: GOTO 08D |
008F: MOVF 1E,W |
0090: MOVWF 25 |
.................... |
.................... set_adc_channel(3); |
0091: MOVLW 18 |
0092: MOVWF 78 |
0093: MOVF 1F,W |
0094: ANDLW C7 |
0095: IORWF 78,W |
0096: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
0097: MOVF 25,W |
0098: SUBLW 3B |
0099: BTFSS 03.0 |
009A: GOTO 0A4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
009B: MOVF 25,W |
009C: SUBLW 28 |
009D: BTFSC 03.0 |
009E: GOTO 0A3 |
.................... { |
.................... cidla |= (last_cidla & 0b00000100); |
009F: MOVF 22,W |
00A0: ANDLW 04 |
00A1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000100; |
00A2: GOTO 0A4 |
00A3: BSF 24.2 |
.................... } |
.................... |
.................... a=read_adc(); |
00A4: BSF 1F.2 |
00A5: BTFSC 1F.2 |
00A6: GOTO 0A5 |
00A7: MOVF 1E,W |
00A8: MOVWF 25 |
.................... |
.................... set_adc_channel(4); |
00A9: MOVLW 20 |
00AA: MOVWF 78 |
00AB: MOVF 1F,W |
00AC: ANDLW C7 |
00AD: IORWF 78,W |
00AE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00AF: MOVF 25,W |
00B0: SUBLW 3B |
00B1: BTFSS 03.0 |
00B2: GOTO 0BC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00B3: MOVF 25,W |
00B4: SUBLW 28 |
00B5: BTFSC 03.0 |
00B6: GOTO 0BB |
.................... { |
.................... cidla |= (last_cidla & 0b00001000); |
00B7: MOVF 22,W |
00B8: ANDLW 08 |
00B9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00001000; |
00BA: GOTO 0BC |
00BB: BSF 24.3 |
.................... } |
.................... a=read_adc(); |
00BC: BSF 1F.2 |
00BD: BTFSC 1F.2 |
00BE: GOTO 0BD |
00BF: MOVF 1E,W |
00C0: MOVWF 25 |
.................... |
.................... set_adc_channel(5); |
00C1: MOVLW 28 |
00C2: MOVWF 78 |
00C3: MOVF 1F,W |
00C4: ANDLW C7 |
00C5: IORWF 78,W |
00C6: MOVWF 1F |
.................... |
.................... if(a<TRESHOLD_MAX) |
00C7: MOVF 25,W |
00C8: SUBLW 3B |
00C9: BTFSS 03.0 |
00CA: GOTO 0D4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00CB: MOVF 25,W |
00CC: SUBLW 28 |
00CD: BTFSC 03.0 |
00CE: GOTO 0D3 |
.................... { |
.................... cidla |= (last_cidla & 0b00010000); |
00CF: MOVF 22,W |
00D0: ANDLW 10 |
00D1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00010000; |
00D2: GOTO 0D4 |
00D3: BSF 24.4 |
.................... } |
.................... a=read_adc(); |
00D4: BSF 1F.2 |
00D5: BTFSC 1F.2 |
00D6: GOTO 0D5 |
00D7: MOVF 1E,W |
00D8: MOVWF 25 |
.................... |
.................... set_adc_channel(6); |
00D9: MOVLW 30 |
00DA: MOVWF 78 |
00DB: MOVF 1F,W |
00DC: ANDLW C7 |
00DD: IORWF 78,W |
00DE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00DF: MOVF 25,W |
00E0: SUBLW 3B |
00E1: BTFSS 03.0 |
00E2: GOTO 0EC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00E3: MOVF 25,W |
00E4: SUBLW 28 |
00E5: BTFSC 03.0 |
00E6: GOTO 0EB |
.................... { |
.................... cidla |= (last_cidla & 0b00100000); |
00E7: MOVF 22,W |
00E8: ANDLW 20 |
00E9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00100000; |
00EA: GOTO 0EC |
00EB: BSF 24.5 |
.................... } |
.................... a=read_adc(); |
00EC: BSF 1F.2 |
00ED: BTFSC 1F.2 |
00EE: GOTO 0ED |
00EF: MOVF 1E,W |
00F0: MOVWF 25 |
.................... |
.................... if(a<TRESHOLD_MAX) |
00F1: MOVF 25,W |
00F2: SUBLW 3B |
00F3: BTFSS 03.0 |
00F4: GOTO 0FE |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00F5: MOVF 25,W |
00F6: SUBLW 28 |
00F7: BTFSC 03.0 |
00F8: GOTO 0FD |
.................... { |
.................... cidla |=(last_cidla & 0b01000000); |
00F9: MOVF 22,W |
00FA: ANDLW 40 |
00FB: IORWF 24,F |
.................... } |
.................... else cidla |= 0b01000000; |
00FC: GOTO 0FE |
00FD: BSF 24.6 |
.................... } |
.................... |
.................... last_cidla=cidla; |
00FE: MOVF 24,W |
00FF: MOVWF 22 |
.................... |
.................... if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
0100: BSF 03.5 |
0101: BSF 06.0 |
0102: BCF 03.5 |
0103: BTFSC 06.0 |
0104: GOTO 10A |
0105: INCFSZ 23,W |
0106: GOTO 108 |
0107: GOTO 109 |
0108: INCF 23,F |
0109: GOTO 10B |
010A: CLRF 23 |
.................... if (shure>CIHLA) cidla|=0b10000000; |
010B: MOVF 23,W |
010C: SUBLW 32 |
010D: BTFSS 03.0 |
010E: BSF 24.7 |
.................... |
.................... cidla=~cidla; |
010F: COMF 24,F |
.................... spi_write(cidla); |
0110: MOVF 24,W |
0111: MOVWF 13 |
0112: BSF 03.5 |
0113: BTFSC 14.0 |
0114: GOTO 117 |
0115: BCF 03.5 |
0116: GOTO 112 |
.................... } |
0117: BCF 03.5 |
0118: GOTO 04E |
.................... } |
0119: SLEEP |
Configuration Fuses: |
Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO |
Word 2: 3FFC NOFCMEN NOIESO |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.PJT |
---|
0,0 → 1,44 |
[PROJECT] |
Target=cidla.HEX |
Development_Mode= |
Processor=0x688F |
ToolSuite=CCS |
[Directories] |
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\dr |
Library= |
LinkerScript= |
[Target Data] |
FileList=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[cidla.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=cidla.c |
[Windows] |
0=0000 cidla.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=C:\Program Files\PICC\drivers\stdlib.h |
4=C:\Program Files\PICC\drivers\stddef.h |
5=C:\Program Files\PICC\drivers\string.h |
6=C:\Program Files\PICC\drivers\ctype.h |
7=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
8= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c (main) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.SYM |
---|
0,0 → 1,45 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 radius |
021 last_radius |
022 last_cidla |
023 shure |
024 main.cidla |
025 main.a |
026 main.n |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0004 main |
0004 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c (main) |
Compiler Settings: |
Processor: PIC16F88 |
Pointer Size: 8 |
ADC Range: 0-255 |
Opt Level: 9 |
Short,Int,Long: 1,8,16 |
Output Files: |
Errors: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sta |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.c |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 50 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.cof |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.h |
---|
0,0 → 1,5 |
#include <16F88.h> |
#device adc=8 |
#fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
#use delay(clock=4000000,RESTART_WDT) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.sta |
---|
0,0 → 1,28 |
ROM used: 282 (7%) |
282 (7%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
148 83 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
6 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
866 166 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 278 99 3 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 278 1766 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.tre |
---|
0,0 → 1,3 |
ÀÄcidla |
ÀÄmain 0/278 Ram=3 |
ÀÄ??0?? |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/macro.ini |
---|