Premier League: Burnley 1 Southampton 0
After an hour of a low-key encounter at Turf Moor on Saturday, Heaton dived low to his left to keep out Tadic's spot-kick, and Barnes soon made the Serbian pay for his wastefulness.
With 17 minutes remaining, Barnes capitalised on hesitancy at the back from the visitors and, via a deflection off Toby Alderweireld, scored his second league goal of the campaign.
His last - against Hull City last month - also came in a 1-0 victory at Turf Moor, and this success lifted Sean Dyche's men out of the bottom three.
For the visitors, defeat means they have now lost four consecutive matches after reverses against Manchester City, Arsenal and Manchester United, although Ronald Koeman's side maintain their fifth-place position in the table.
Burnley, meanwhile, extended their unbeaten home run to four matches with just their third victory of the campaign.
Jake Hesketh made his first start for Southampton, replacing Shane Long, while the visitors' only other alteration from the 2-1 defeat against United saw Alderweireld return to the centre of defence in place of Maya Yoshida.
Burnley, unchanged from the 2-0 defeat at QPR, threatened twice in the opening three minutes through Danny Ings, who failed to make a telling connection to George Boyd's cross before flashing a 25-yard drive narrowly wide.
The home side went close to an opener again in the 26th minute when Southampton goalkeeper Fraser Forster reacted smartly after Nathaniel Clyne had deflected Kieran Trippier's cross goalwards under pressure from Barnes.
Hesketh, booked earlier for sliding in late on Heaton, saw his maiden start curtailed in the 32nd minute.
Following a heavy collision with Michael Keane, the 18-year-old hobbled off and was replaced by James Ward-Prowse.
He made his first appearance since September having recovered from a fractured foot and soon tested Heaton with a low shot five minutes before the interval.
Following a quiet start to the second period, Sadio Mane sent his shot over the crossbar following some neat interplay from Southampton, who then passed up a golden opportunity to break the deadlock.
After Boyd had tripped Ryan Bertrand in the left-hand corner of the area, Tadic struck his penalty well but Heaton was equal to it to preserve his clean sheet.
Burnley responded, Ings forcing a smart low save from Forster before Barnes provided the crucial breakthrough.
Ings charged down Clyne's clearance and the ball ran kindly for his strike partner, who slotted beyond Forster with the help of a deflection off Alderweireld.
Clyne almost atoned for his part in the goal when he fired a drive narrowly past Heaton's right-hand post three minutes from time, but that proved to be Southampton's last meaningful effort as Burnley held on for a precious victory.