برنامه زیر مربوط به master و slave یک ارتباط spi هست . زمانی که برنامه رو بدون وقفه مینویسم همه چی درست کار میکنه ولی زمانیکه از وقفه استفاده می کنم برنامه مشکل دار میشه
وقتی اینتراپت ها رو غیر فعال میکنم مدار درست میشمره
وقتی فقط اینتراپت master رو فعال میکنم باز هم مدار درست میشمره
اما وقتی اینتراپت slave رو فعال میکنم یا هر دو اینتراپت رو فعال میکنم مدار یکی در میون میشمره و بعضی وقتها هم در شمردن پرش زیادی میکنه
توضیح برنامه :
میکروکنترلر (atmega32) مستر اطلاعات مربوط به یک شمارنده یک بایتی را به میکروکنترلر اسلیو (atmega32) ارسال میکند و اسلیو آنرا روی پورت d نمایش میدهد
توضیح سخت افزار :
پایه های mosi, miso , skc, ss متناظرا به هم وصل هستند و تغذیه دو میکروکنترلر مشترک است و به پایه های پورت d اسلیو تعداد 8 عدد led متصل است.
برنامه master
کد:$regfile = "m32def.dat" $crystal = 8000000 Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0 Spiinit Enable Interrupts Enable Spi On Spi Spi_master Dim A As Byte A = 0 Do Waitms 200 Spiout A , 1 Loop End Spi_master: Incr A Return
برنامه slave
کد:$regfile = "m32def.dat" $crystal = 8000000 Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0 Spiinit Enable Interrupts Enable Spi On Spi Spi_slave Dim A As Byte Config Portd = Output Do : Loop End Spi_slave: Spiin A , 1 Portd = A Return